-1

私は過去に mysql と mysqli を使用していましたが、新しいプロジェクトを開始しているので、PDO-mysql で OOP に戻りたいと思っていました..しかし、それは動作したくありません:

$dbh = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password);
if(isset($_POST["name"]) && isset($_POST["password"]))
    {

        $pwdHasher = new PasswordHash(8, FALSE);
        $hash = $pwdHasher->HashPassword($_POST["password"]);
        //$insert = $dbh->prepare('insert into users (username,password) values ("?","?")');
        $insert = $pdo->prepare("insert into users (username,password) values (?,?)");      
        $insert->bindParam(1,$_POST["name"]);
        $insert->bindParam(2,$hash);
        $insert->execute();
        echo "Registration Success!";
    }

編集: 上記のコードは、コードをコメント行からコメントなし (つまり、一重引用符から二重引用符) に変更すると機能しますが、後で機能しません:

$query = $pdo->prepare("select * from users where username = ?");
$query->bindParam(1,$_POST["name"]);
$result = $query->execute()
4

3 に答える 3

1

わかりました。最初の質問に対する答えが見つかりました。
2番目の場合は次のようになります

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

接続直後に呼び出されます。
クエリの何が問題なのかがわかります。

error_reporting(E_ALL); 

また、変数のスペルミスなどのエラーにも常に役立ちます (たとえば、$pdo は $dbh ではありません)。

于 2013-01-29T12:31:28.963 に答える
-1

この質問への答えは単純で恥ずかしいです: 準備中の sql ステートメントを囲む単一引用符を二重引用符に変更する必要があります (そして、'?' マークがある場所の二重引用符を削除します. 変更:

$insert = $dbh->prepare('insert into users (username,password) values ("?","?")');

$insert = $dbh->prepare("insert into users (username,password) values (?,?)");

そしてすべてが機能します。

于 2013-01-29T12:43:04.520 に答える
-1

あなたが使用したい場合は?プレースホルダーの場合、疑問符の位置に一致する配列を execute-method に送信する必要があります。$insert->execute(array('value1', 'value2'));

ただし、名前付きのプレースホルダー.. WHERE x = :myxvalueを使用して使用できます$insert->bindValue(':myxvalue', 'thevalue', PDO::PARAM_STR);

また、 と の違いを見てくださいbindParambindValue

于 2013-01-29T12:25:18.237 に答える