私はまだ mysql_* のものを PDO と準備されたステートメントに変換しようとしています。Web全体でこれを行うのは本当に大変な作業ですが、私はあきらめず、いくつかの問題に遭遇しました.
私の質問はmysql_query()
、1 つの関数内の複数のコマンドについてです。したがって、コードに次のようなものがある場合:
if (something)
{
mysql_query("UPDATE account SET pass=$pass WHERE id=$id");
mysql_query("UPDATE account_2 SET lock=$lock WHERE id=$id");
mysql_query("UPDATE account_3 SET surname=$surname WHERE id=$id");
}
そして、準備済みステートメントを PDO に転送したいと考えています。私はすでに次のようなことをしなければならないことを知っています:
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
実際には 2 つの質問があります。bindValue パスワードを文字列 (PDO::PARAM_STR) として使用してもよろしいですか? より多くのクエリがあるため、他のステートメントを追加するときは、$stmt2 のように別の名前を付ける必要がありますか、それとも実行時にこのように常に $stmt しか実行できませんか?
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$stmt = $db->prepare("UPDATE account_2 SET lock=:lock WHERE id=:id");
$stmt->bindValue(':lock', $lock, PDO::PARAM_INT);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
}
それとも、むしろこれを行うべきですか?
if (something)
{
$stmt = $db->prepare("UPDATE account SET pass=:pass WHERE id=:id");
$stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$stmt2 = $db->prepare("UPDATE account_2 SET lock=:lock WHERE id=:id");
$stmt2->bindValue(':lock', $lock, PDO::PARAM_INT);
$stmt2->bindValue(':id', $id, PDO::PARAM_INT);
$stmt2->execute();
}
そして最後にもう一つ。次のようなコード関数/チェックがある場合:
if (mysql_query("INSERT INTO account (id, pass, email, request_time, status) VALUES ('".$id."', '".$pass."', '".$mail."', '".time()."', '".$status."')"))
{
blabla
}
最初に PDO に存在する必要がある場合に挿入コマンドが実行された場合、stmt と PDO でサック チェックを使用する方法は?
そして最後の質問... PDO の準備済みステートメントで既に bindValue を使用している場合、後でコードで is_numeric() 関数を使用する必要がありますか?
要約:
1) bindValue パスワードを文字列 (PDO::PARAM_STR) として使用してもよろしいですか?
2) より多くのクエリがあるのでステートメントを追加するとき、$stmt、$stmt2、$stmt3 のように別の名前を付ける必要がありますか、それともすべてのステートメントを同じにする必要がありますか?
3) PDO の準備済みステートメントで既に bindValue を使用している場合、後でコードで is_numeric() 関数を使用する必要がありますか?
皆さん、ありがとうございました