0
function db_execute($sql,$db,$array)
{
    require(getcwd() . '/config/config.php');

    if (empty($array))
    { 
        $array = "";
        print "Something wrong";
    }
    $connection = db_connect($db_host,$db_username,$db_password,$db);
    $q = $connection->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));


    $q ->execute(array($array));

    if(!$q)
    {
        die("Error! " . $connection->errorInfo());
    }

    $result = $q -> fetchAll();

    return $result; 
}

$sql = "SELECT VALUE FROM users WHERE :id = :idnum";
$array = array(':id' => 'USER_ID', ':idnum' => '2');


printFormattedArray($array);
printFormattedArray(db_execute($sql,"user_db",$array));

何らかの理由で、この関数から結果を取得して結果を返すことができません。しかし、クエリを

$sql = "SELECT VALUE FROM users WHERE USER_ID = 2";

必要な結果が得られます。私は何を間違っていますか?

4

1 に答える 1

1

基本的に、2 つの選択肢があります。

.1. クエリで動的識別子を使用しないでください。
では、2 番目のクエリに進みます。

$sql   = "SELECT VALUE FROM users WHERE USER_ID = :idnum";
$array = array(':idnum' => '2');
$data  = db_execute($sql, $array);

.2. 動的識別子が必要な場合は、それらにも個別のプレースホルダー
が必要です 。したがって、コードは次のようになります

$sql   = "SELECT VALUE FROM users WHERE ?n = ?i";
$data  = db_execute($sql, 'USER_ID', 2);

また、

  • クエリ実行機能では絶対に接続しないでください。一度接続してから、開いている接続を使用する
  • PDO を常に mysql エラーを報告するように設定する

接続後にこのコードを追加します

$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
于 2013-02-14T05:35:47.070 に答える