2012-02-19 9 views
0

まず、タイトルが状況を説明できない場合は申し訳ありません。
私はフォームからすべての入力を受け取り、データベースに入れようとしています。私はこれが可能ならば100%確信しているわけではありませんが、確かめるために投稿したいと思っていました。コードはコメントされていますが、私は得意先ですプリペイドステートメントを使用するときの事前定義文

INSERT INTO items (title, description, category, size) VALUES (?, ?, ?, ?) 
'ssss', $fields[0][1], $fields[1][1], $fields[2][1], $fields[3][1] 
Warning: Wrong parameter count for mysqli_stmt::bind_param() 

私は変数を渡すので、その値ではないと推測しています。しかし、たとえ私がその価値を渡したとしても、それが良いコードであるかどうかは疑問です。 http://www.php.net/manual/en/mysqli-stmt.bind-param.phpから

 // $fields[x][0] is title of x, $fields[x][1] is value of x 
     $statement = 'INSERT INTO items ('; 
     // Add all the field names 
     for ($i = 0; $i < count($fields) - 1; $i++) { 
      $statement .= $fields[$i][0] . ', '; 
     } 
     $statement = $statement . $fields[count($fields) - 1][0] . ') VALUES ('; 
     // Add '?' for every field 
     for ($i = 0; $i < count($fields) - 1; $i++) { 
      $statement .= '?, '; 
     } 
     $statement = $statement . '?)'; 
     echo $statement . '<br />'; 
     // Add all the value types to the statement 
     $params = '\''; 
     for ($i = 0; $i < count($fields); $i++) { 
      if (gettype($fields[$i][1]) == 'integer') { 
       $params .= 'i'; 
      } else { 
       $params .= 's'; 
      } 
     } 
     $params .= '\', '; 
     // Put the values into the statement 
     for ($i = 0; $i < count($fields) - 1; $i++) { 
      $params .= '$fields[' . $i . '][1], '; 
     } 
     $i = count($fields) - 1; 
     $params .= '$fields[' . $i . '][1]'; 
     echo $params; 
     // Put it all in the database 
     $db = mysqlConnect(); 
     $stmt = $db->stmt_init(); 
     $stmt->prepare($statement); 
     $stmt->bind_param($params); 
     $stmt->close(); 
     $db->close(); 

答えて

0

:(http://php.net/manual/en/mysqli-stmt.bind-param.php)

bool mysqli_stmt::bind_param (string $types , mixed &$var1 [, mixed &$... ]) 

あなたが呼び出している

$stmt->bind_param($params); 

$stmt->bind_param($types,$params); 

これは世代に私に悪い考えに見えることに注意してください:だからない$ paramsはで、別の変数の型を持っており、このようにそれを呼び出す必要がありますエルラル。 itemsテーブルには特定のスキーマがあるので、ハードコードされたクエリと型変数を用意し、値をparams配列に必要な形式で入れるだけです。

コードがきれいになり、不正なフィールドの配列を処理する必要がなくなります。

+0

私はこれが私が得る応答のようだと思ったので、私は定期的なクエリに固執する必要があります。私はそれをパラメータとして渡すことについて知っていましたが、 '$ params'をその値に置き換える方法があると思っただけです(正しく動作しました、ish)。 –

0

bool mysqli_stmt::bind_param (string $types, mixed &$var1 [, mixed &$... ])

のパラメータは、個々の引数として渡さなければなりません。 bind_paramのためのPHPマニュアルから