Не удается подключиться к серверу MySQL с помощью PDO
Я новичок в mySQL, и код, который я использовал, который работал, явно устарел, поэтому я перешел на PDO. Я пытался как можно точнее перенести кодирование со старого стиля на PDO, но теперь я не могу подключиться, и я уверен, что просто делаю что-то глупое, чтобы испортить это.
Вот мой старый код, который работал:
//insert.php
mysql_connect("localhost","root","root");//database connection
mysql_select_db("Menu_Items");
$name = $_POST['food'];
$order = "INSERT INTO foods
(name)
VALUES
('$name')";
//inserting data order
//declare in the order variable
$result = mysql_query($order);
if($result){
echo("<br>Input data is succeed");
}else{
echo("<br>Input data is fail");
}
Вот мой новый код PDO, который не работает:
$dbc = "mysql:host=localhost;dbname=Menu_Items";
$user = "root";
$pass = "root";
$pdo = new pdo($dbc, $user, $pass);
$name = $_POST['food'];
$insert = "INSERT INTO foods (name) VALUES ('$name')";
$result = pdo -> query($insert);
if($result){
echo("<br>Input data is succeed");
}else{
echo("<br>Input data is fail");
}
Где проблема? Благодарю.
3 ответа
Итак, как я упоминаю в комментарии,
pdo -> query($insert);
должно быть
$pdo->query($insert);
Одна из основных причин использования PDO состоит в том, что у него есть инструменты, помогающие избежать внедрения SQL. Итак, это:
$insert = "INSERT INTO foods (name) VALUES ('$name')";
это большой нет-нет. Убедитесь, что вы используете параметризованный запрос, по крайней мере:
$insert = $pdo->prepare("INSERT INTO foods (name) VALUES (:name)");
$insert->bindParam(":name", $name);
$insert->execute();
Попробуйте обработать ошибку. Например:
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
Если у вас была ошибка подключения, вы могли бы хотя бы увидеть, что это за ошибка.