我有一份聲明一個問題,這裏是我的代碼:mysqli的致命錯誤:調用一個成員函數bind_param()一個非對象
function query_array($table, $data) {
foreach ($data as $column => $value) {
$columns[] = sprintf("`%s` = '%s'", $column, $this->db->real_escape_string($value));
}
$column_list = join(',', $columns);
// Prepare the statement
$stmt = $this->db->prepare("UPDATE `?` SET ?");
$stmt->bind_param('ss', $table, $column_list);
// Execute the statement
$stmt->execute();
// Save the affected rows
$affected = $stmt->affected_rows;
// Close the statement
$stmt->close();
// ...
}
$這個 - >數據庫返回一個對象;
$ table ='settings'; (串)
$ column_list中:(串)
`title` = 'Socialsd',`captcha` = '0',`public` = '',`private` = '',`time` = '1',`perpage` = '10',`message` = '140',`mail` = '1',`inter` = '10000',`size` = '1048576',`format` = 'png,jpg,gif',`sizeMsg` = '1048576',`formatMsg` = 'png,jpg,gif,bmp',`censor` = '',`ad1` = '',`ad2` = ''
我得到的錯誤是:
Fatal error: Uncaught exception 'ErrorException' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1' in C:\xampp\htdocs\new\includes\classes.php:256 Stack trace: #0 C:\xampp\htdocs\new\sources\admin.php(225): updateSettings->query_array('settings', Array) #1 C:\xampp\htdocs\new\index.php(42): PageMain() #2 {main} thrown in C:\xampp\htdocs\new\includes\classes.php on line 256
我想不出是什麼原因導致的,因爲嘗試了以下工作就好:
$query = sprintf("UPDATE `%s` SET %s", $table, $column_list);
$result = $this->db->query($query);
任何幫助表示讚賞。
更新1:我可以知道爲什麼這個會被低估嗎?這將是很高興知道。
更新2:所以我已經刪除了最後綁定($ column_list中),並把在聲明$ column_list中的整個輸出,所以基本上我只綁定表名,現在我得到另一個錯誤:
Can't find file: '.\diary\@003f.frm' (errno: 22)
現在我真的很困惑。
[mysqli :: prepare SQL error](http://stackoverflow.com/q/11559186/1409082)可能出現重複。 – Jocelyn
@Jocelyn感謝您的評論,即使我手動將表名設置爲'settings',錯誤仍然存在,完全一樣。 –