1

私は何年も前から PHP 用の古い MySQL ライブラリを使用してきましたが、ついに MySQLi を使用するようになりました。プリペアド ステートメントは非常に便利なようです。

現在、いくつかの準備済みステートメントを作成し、それらのパラメーターをグローバルにバインドしてから、関数を使用して次のように実行しています。

$stmt = $mysqli->prepare("INSERT ...");
$stmt->bind_param("ss", $var1, $var2);

function process($t) {
    global $mysqli, $stmt;
    $var1 = $t['var1'];
    $var2 = $t['var2'];
    $stmt->execute();
}

私が直面している問題は、実行関数が変数がまだ null であるというエラーに遭遇することです。から値を収集するときにバインド/バインド解除する必要があります$tか?

4

2 に答える 2

0

このようにコードを配置するとうまくいくと思います: ( $t array() に変数が存在すると仮定します)

function process ($t) {
  global $mysqli; 
  $var1 = $t['var1'];     
  $var2 = $t['var2'];

  $stmt = $mysqli->prepare("INSERT ..."); 
  $stmt->bind_param("ss", $var1, $var2);  
  $stmt->execute();

}
于 2012-07-24T14:04:03.147 に答える
-1

私はそのようなダミーです:

$stmt = $mysqli->prepare("INSERT INTO table (col1, col2) VALUES(?, ?)");

function process($t) { 
    global $mysqli, $stmt;
    $var1 = $t['var1'];
    $var2 = $t['var2'];
    $stmt->bind_param("ss", $var1, $var2);
    $stmt->execute();
}

私は、MySQLi が変数とのマジック バインディングを行っていると考えていました。この場合bind_param、特定の変数がステートメントに「バインド」されていることを石で宣言するのではなく、準備されたステートメントに値を配置するだけです。

于 2012-07-24T14:05:33.417 に答える