1

私は、PHPでデータベース作業を行うPDOの方法に切り替えることで遊んでいます。私のJavaライフでは、名前付きクエリを連想配列に配置し、インデックスを使用してプリペアドステートメントを呼び出すことができます。それより少し複雑ですが...

とにかく、PHPで同じタイプのことをするのはクールだと思いました。

$NamedQueries['SelectBlackBoxById'] = "select name, category, rating from blackbox where id = :blackbox_id";

したがって、次のようにステートメントを準備できます。

$sth = $dbh->prepare($NamedQueries['SelectBlackBoxById']);
$sth->execute(array('blackbox_id' => '1'));
$sth->setFetchMode(PDO::FETCH_OBJ); 
return $sth->fetch();

この方法の代わりに:

$sth = $dbh->prepare("select name, category, rating from blackbox where id = :blackbox_id");
$sth->execute(array('blackbox_id' => '1'));
$sth->setFetchMode(PDO::FETCH_OBJ); 
return $sth->fetch();

私の好みの方法はfalseを返すので、私は何かを見落としていると確信しています。任意のアイデアをいただければ幸いです。

4

3 に答える 3

0

配列値を使用してクエリを準備する前に、配列値をダンプしようとしましたか? 全体として、PDO がそれを使用する方法に問題はないと思います。$sth 変数を準備した後で var_dump() を実行して、そこに何があるかを確認することもできます。

一般に、他の人が指摘したように、「:」は変数をバインドするときに含める必要があるものですが、この場合、同じ構文を使用する2番目の例が機能したと言ったように、必ずしも根本的な問題であるとは思いません.唯一の違いは、生の文字列の代わりに配列からのクエリを使用することです。バインドする変数は 1 つだけなので、「:」がなくても問題はないと考えています (ただし、追加する必要があります)。

于 2013-02-15T17:18:25.180 に答える
0
$sth->execute(array('blackbox_id' => '1'));

する必要があります

$sth->execute(array(':blackbox_id' => '1'));

含める必要があります:

于 2013-02-15T17:15:37.003 に答える
0

したがって、実際の問題はエラー処理の欠如です。そして、それは持続します。

error_reporting(E_ALL);

スコープ外の変数が通知されます。

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

接続後、空のクエリやその他の PDO エラーが通知されます

于 2013-02-15T17:54:29.900 に答える