0

私は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");
}

どこに問題がありますか?ありがとう。

4

3 に答える 3

1

PDO を使用する主な理由の 1 つは、SQL インジェクションを回避するのに役立つツールがあることです。したがって、この:

$insert = "INSERT INTO foods (name) VALUES ('$name')";

は大したことではありません。少なくとも、パラメーター化されたクエリを使用していることを確認してください。

$insert = $pdo->prepare("INSERT INTO foods (name) VALUES (:name)");
$insert->bindParam(":name", $name);
$insert->execute();
于 2013-02-28T06:06:49.243 に答える
1

コメントで述べたように、

pdo -> query($insert);

する必要があります

$pdo->query($insert);
于 2013-02-28T06:10:54.210 に答える
1

エラー処理を試してみてください。例えば:

<?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();
}
?>

接続エラーが発生した場合、少なくともエラーの内容を確認できました。

于 2013-02-28T06:00:07.190 に答える