2

データベースを扱うために、古い SQL メソッドから新しい PDO メソッドに移行しようとしています。

これが私がこれまでに持っているものです:

try{
$conn = new PDO(.......)//this code is working fine
$conn->exec("SET CHARACTER SET utf8");

$query = "INSERT INTO TABLE(name,username,password)VALUES(:name,:username,:password)";

$prepare_query = $conn->prepare($query);

$prepare_query->bindValue(':name',$name,PDO::PARAM_STR);
$prepare_query->bindValue(':username',$user,PDO::PARAM_STR);
$prepare_query->bindValue(':password',$pass,PDO::PARAM_STR);

$count = $conn->exec($prepare_query);//error is somewhere here
}catch(PDOException $e){
echo $e->getMessage();
}

if($count > 0) echo "done";

今私が受け取っているエラーは警告です: PDO::exec() はパラメーター 1 が文字列であることを期待しています。

PDO メソッドに関しては、私は NEWBEE です。私はこれを読みました!しかし、ここではステートメントの準備方法を示していません。データベースをできる限り保護したい。誰かが私が間違っている場所とこれを修正する方法を説明してもらえますか?

4

2 に答える 2

4

接続オブジェクトの->exec()メソッドは、実行するクエリを含む最初の引数として文字列を想定していますが、準備されたステートメントは次のように期待どおりに動作します->execute()

$success = $prepare_query->execute();
// $success is true if execution was okay
$count = $prepare_query->rowCount();
// $count is the rows affected
于 2013-04-22T16:22:27.970 に答える
0

exec メソッドでバインドしてみてください。

$sql = "INSERT INTO TABLE(name,username,password)VALUES(:name,:username,:password)";
$q = $conn->prepare($sql);
$q->execute(array(':name'=>$name,
                  ':username'=>$username,
                      ':password'=>$password));
于 2013-04-22T16:28:52.437 に答える