2

これは、プリペアドステートメントを作成する私の関数です。

function query($query, $values_array) {

if ($stmt = $link->prepare($query)) {

    for ($i = 1; $i < count($values_array); $i++) {
     if (!$stmt->bind_param($values_array[0][$i-1], $values_array[$i])) {
        return false;
     }
    }

if (!$stmt->execute()) {
    return false;
}
$result = $stmt->get_result();
$stmt->close();
}

return $result;
}

$queryは

insert into table (var1, var2, var3, var4, var5, var6) values (?, ?, ?, ?, ?, ?)

$values_arrayは

array(7) {
[0]=>
string(6) "diisii"
[1]=>
float(9)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
string(5) "now()"
[5]=>
int(1)
[6]=>
int(1)
}  

このエラーは、パラメータを挿入ステートメントにバインドするときにのみスローされるため、問題を理解できません。一部のステートメントは問題なく機能します。

4

1 に答える 1

1

これは、mysqliがプリペアドステートメントで完全に使用できない理由を示す明確な例です。safemysql
のように、PDOまたは手動で解析されたカスタムプレースホルダーを使用します。

mysqliとは異なり、PDOにはプリペアドステートメントを使用可能にする2つの優れた機能があります。

  • 配列を使用するか、配列をに渡すことにより、プレースホルダーをでバインドします。bindValue()execute()
  • 個別の変数の奇妙なバインディングではなく、通常の配列としてクエリ結果を返します。
于 2013-02-23T17:04:35.167 に答える