2012-02-19 84 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() 

我猜這是因爲我通過變量,而不是它的價值。但即使我確實通過了它的價值,不管它是否好代碼對我來說都是值得懷疑的。

 // $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

從PHP手冊bind_param:(http://php.net/manual/en/mysqli-stmt.bind-param.php)

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

要調用

$stmt->bind_param($params); 

所以,你應該有類型的獨立變量,而不是在$ PARAMS並調用它像這樣:

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

請記住,這看起來是一個壞主意給我根全部擦除。由於items表具有特定的模式,因此您應該可以使用硬編碼查詢和類型變量,並將值以params數組的形式放入所需格式。

您將擁有更簡潔的代碼,並且不必處理不合格的字段數組。

+0

我認爲這將是我會得到的迴應,所以我必須堅持定期查詢。我確實知道將它作爲參數傳遞,我只是認爲可能有一種方法可以用它的值替換'$ params'(所以它正常工作,ish)。 – 2012-02-19 21:21:26