1

PDO 関数を作成しようとしていますが、パラメーターのバインドに苦労しています。通常は :field アプローチを使用しますが、この場合、変数の数や名前がわかりません。

function fetch($field,$table,$query,$values){

    global $kdb;

    $sql = "SELECT $field FROM $table $query";

    $stmt = $kdb->prepare($sql);

    $num = 1;
    foreach($values as $value){ $stmt->bindParam($num, $value); $num += 1;}

    $stmt->execute();
    $row = $stmt->fetch();
    return $row;
} 

これは、このようなページで呼び出されます (後でインジェクションを回避するための手順を追加します)

print_r(fetch("*","user","WHERE `ID` = ? AND `forename` = ?",array('1','Robin')));

問題はにあると思いますが、その$stmt->bindParam($num, $value);理由はわかりません。

4

2 に答える 2

1

この記事を書いている時点では、実際に何が問題なのかは語られていませんが、問題を引き起こしている可能性があることの 1 つは、参照によってbindParam()変数をバインドすることです。配列から特定の値のみを渡したいので、より適切な場合があります。bindValue()

于 2013-09-15T20:56:38.947 に答える
1

過度の複雑さの罪。

bundParam 関数を削除し、変数を配列内の execute ステートメントに順番に追加します。

function fetch($field,$table,$query,$values){

    global $kdb;

    $sql = "$function $field FROM $table $query";

    $stmt = $kdb->prepare($sql);

    $stmt->execute($values);

    $row = $stmt->fetch();
    return $row;
}
于 2013-09-15T16:02:00.630 に答える