Недавно я узнал, что mysql_ * обесценился, и у меня есть быстрый вопрос о том, как переписать что-то.
$db = mysql_connect("localhost","root","PASSWORD"); if(!$db) die("Error connecting to MySQL database."); mysql_select_db("FormData" ,$db);
Я пробовал переписывать его вот так …
$mysqli = new mysqli("localhost", "root", "PASSWORD", "FormData", $db); if(!$db) die("Error connecting to MySQL database.");
Но когда он публикует мою форму, я получаю сообщение «Ошибка подключения к базе данных MySQL». ошибка. Я смог исправить это, просто используя это, но я хотел знать, как добавить в соединение Error.
$mysqli = new mysqli("localhost", "root", "PASSWORD", "FormData");
Любая помощь будет замечательной, поскольку я пытаюсь изучить все новые вещи MySQLi!
Веб-сайт PHP
Прямо от php.net
<?php $mysqli = new mysqli('localhost', 'fake_user', 'my_password', 'my_db'); // Works as of PHP 5.2.9 and 5.3.0. if ($mysqli->connect_error) { die('Connect Error: ' . $mysqli->connect_error); } ?>
Редактировать:
Ниже также вы сможете сделать это по-своему.
$mysqli = mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db');
Тогда ты можешь:
if (!$mysqli) { //handle the error }
По возможности рассмотрите PDO. Они похожи на меня.
$mysqli = new mysqli("localhost", "root", "PASSWORD", "FormData", $db); if(!$db) die("Error connecting to MySQL database.");
должно быть
$mysqli = new mysqli("localhost", "root", "PASSWORD", "FormData"); if($mysqli->connect_error) die("Error connecting to MySQL database.");
параметры для mysqli ():
[ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]]
Не знаете, почему вы пытались использовать переменную $db
чтобы установить порт для подключения, а затем проверить, истинна ли переменная порта …
Для справок в будущем лучше всего смотреть в первую очередь, это документы
РЕДАКТИРОВАТЬ
Как отметил @Touch, вы должны проверить, существует ли ошибка, а не только этот объект. Отредактированный код, чтобы отразить это.
Использование mysqli:
define('DB_HOST', 'localhost'); define('DB_NAME', 'some_database_name'); define('DB_USER', 'some_user'); define('DB_PASS', 'some_password'); $Connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); if (!$Connection->connect_errno) { //do your prepared stuffs } else { die("Database Connection error:".$Connection->connect_error); }
или с использованием PDO
try { $PDOConnection = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', DB_USER, DB_PASS); $PDOConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //do your prepared stuffs $PDOConnection = null; } catch(PDOException $e) { die('ERROR: ' . $e->getMessage()); }
Я написал класс с именем better_mysqli, который расширяет mysqli, что упрощает его использование.
Следующий пример показывает ответ на ваш вопрос, а также показывает базовое использование класса better_mysqli. Вы можете просмотреть подробный пример с большим количеством комментариев здесь: подробное использование better_mysqli
<?php include_once('better_mysqli.php'); // can be obtained from: http://pastebin.com/ATyzLUfK // THIS NEXT PART ANSWERS YOUR QUESTION // THIS NEXT PART ANSWERS YOUR QUESTION // THIS NEXT PART ANSWERS YOUR QUESTION // THE ONLY DIFFERENCE IN THE CONNECTION WHEN USING better_mysqli AND mysqli // is $mysqli = new better_mysqli(...) and $mysqli = new mysqli(...) // == Instantiate the mysqli database object (aka open the database) == $mysqli = new better_mysqli('your_server', 'your_user', 'your_pass', 'your_db_name'); if (mysqli_connect_errno()) { error_log(sprintf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error())); exit; } // == select example == unless( $sth = $mysqli->select('select * from table1 where col1=? and col2=?', $row, array('col1_placeholder_value', 'col2_placeholder_value'), $debug_level=0, $verbose_debug_output)){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } while($sth->fetch()){ echo $row['col1'] .', '. $row['col2'] .', and '. $row['col_etc'] .' are accessed like that.<br>'; } // == insert example == $statement = "insert into table1 (col1, col2, date_col, col_etc) values (?, ?, NOW(), ?)"; unless( $mysqli->insert($statement, array('col1_insert_value', 'col2_insert_value', 'col_etc_value'), $debug_level=0, $verbose_debug_output, $id_of_new_record) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // == update example == unless($mysqli->update("update table1 set col1=? where col2=?", array('col1_value', 'col2_value'), $debug_level=0, $verbose_debug_output) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // == delete example == unless( $mysqli->delete("delete from table1 where col1=? where col2=?", array('col1_value', 'col2_value'), $debug_level=0, $verbose_debug_output) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // in all cases statements are prepared just once and cached so if you reuse any statement the already prepared statement handle is automatically used ?>
в<?php include_once('better_mysqli.php'); // can be obtained from: http://pastebin.com/ATyzLUfK // THIS NEXT PART ANSWERS YOUR QUESTION // THIS NEXT PART ANSWERS YOUR QUESTION // THIS NEXT PART ANSWERS YOUR QUESTION // THE ONLY DIFFERENCE IN THE CONNECTION WHEN USING better_mysqli AND mysqli // is $mysqli = new better_mysqli(...) and $mysqli = new mysqli(...) // == Instantiate the mysqli database object (aka open the database) == $mysqli = new better_mysqli('your_server', 'your_user', 'your_pass', 'your_db_name'); if (mysqli_connect_errno()) { error_log(sprintf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error())); exit; } // == select example == unless( $sth = $mysqli->select('select * from table1 where col1=? and col2=?', $row, array('col1_placeholder_value', 'col2_placeholder_value'), $debug_level=0, $verbose_debug_output)){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } while($sth->fetch()){ echo $row['col1'] .', '. $row['col2'] .', and '. $row['col_etc'] .' are accessed like that.<br>'; } // == insert example == $statement = "insert into table1 (col1, col2, date_col, col_etc) values (?, ?, NOW(), ?)"; unless( $mysqli->insert($statement, array('col1_insert_value', 'col2_insert_value', 'col_etc_value'), $debug_level=0, $verbose_debug_output, $id_of_new_record) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // == update example == unless($mysqli->update("update table1 set col1=? where col2=?", array('col1_value', 'col2_value'), $debug_level=0, $verbose_debug_output) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // == delete example == unless( $mysqli->delete("delete from table1 where col1=? where col2=?", array('col1_value', 'col2_value'), $debug_level=0, $verbose_debug_output) ){ if($debug_level>0){ echo $verbose_debug_output;} // .. do your error handling here } // in all cases statements are prepared just once and cached so if you reuse any statement the already prepared statement handle is automatically used ?>