PHPのジャングルでの冒険:データオブジェクト準備されたステートメントを介してMySQLクエリを実行する際に問題が発生しました。
次のコードを確認してください。
$dbhost = "localhost";
$dbname = "pdo";
$dbusername = "root";
$dbpassword = "845625";
$link = new PDO("mysql:Host=$dbhost;dbname=$dbname","$dbusername","$dbpassword");
$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
VALUES('Bob','Desaunois','18')");
$statement->execute();
これは私であり、データベースに登録したいです。しかし、私は迷子になり続けます。グーグルによると、これはそれを行う方法ですが、私のデータベースは空のままです。
ここに何かが足りませんか?私は今、かなりの時間立ち往生しており、PDOの勉強を続けたいと思っているからです!
あなたはそれをそのように使用する必要があります
<?php
$dbhost = 'localhost';
$dbname = 'pdo';
$dbusername = 'root';
$dbpassword = '845625';
$link = new PDO("mysql:Host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (:fname, :sname, :age)');
$statement->execute([
'fname' => 'Bob',
'sname' => 'Desaunois',
'age' => '18',
]);
準備されたステートメントは入力をサニタイズするために使用され、それを行うには:foo
without SQL内の任意の単一引用符をbind変数に使用してから、 SQLステートメントで定義した変数の連想配列で渡すexecute()
関数。
?
の代わりに:foo
を使用し、そのような入力に値だけの配列を渡すこともできます。
$statement = $link->prepare('INSERT INTO testtable (name, lastname, age)
VALUES (?, ?, ?)');
$statement->execute(['Bob', 'Desaunois', '18']);
どちらの方法にも長所と短所があります。個人的には読みやすいので、パラメーター名をバインドすることを好みます。
コードを次のように書き直しました。
$dbhost = "localhost";
$dbname = "pdo";
$dbusername = "root";
$dbpassword = "845625";
$link = new PDO("mysql:Host=$dbhost;dbname=$dbname", $dbusername, $dbpassword);
$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $link->prepare("INSERT INTO testtable(name, lastname, age)
VALUES(?,?,?)");
$statement->execute(array("Bob","Desaunois",18));
そして、今ではうまくいくようです。しかし。私が意図的にエラーを発生させた場合、エラーがあるとは言いません。コードは機能しますが、それでも機能します。さらにエラーが発生した場合、その理由はわかりません。