我創建了一個查詢類來處理我所有的基本 sql 函數,在類中我有一個基本函數,它使用準備好的語句插入數據,即“插入”函數,我不太清楚為什么,但我一直收到同樣的錯誤(列出以上)每次我調用該函數時class Query{ private $conn; private $table; public function __construct($conn, $table) { $this->conn = $conn; $this->table = $table; } public function Insert($fields, $placeholders, $binders, $values) { $field_val= implode(', ', $fields); $ph=implode(', ', $placeholders); array_walk($values, function(&$x) {$x = "'$x'";}); $val = implode(', ', $values); $query = 'INSERT INTO '.$this->table.' ('.$field_val.') VALUES('.$ph.')'; $stmt = $this->conn->prepare($query); $stmt->bind_param(''.$binders.'', $val); $stmt->execute(); }}這是用于將數據插入注釋表的函數的示例,連接來自模塊中包含的單獨數據庫文件 $database = new Database(); $conn = $database->connect(); //values $comment_date = mysqli_real_escape_string($conn, htmlspecialchars($_POST['date-comment'])); $commenter = mysqli_real_escape_string($conn, htmlspecialchars($_POST['comment_name_of'])); $comment = mysqli_real_escape_string($conn, htmlspecialchars($_POST['comment'])); $comments_save = new Query($conn, 'nw_comments'); $fields = array('commenter_name', 'comment_value', 'date_commented'); $placeholders = array('?', '?', '?'); $binders = "sss"; $values = array($commenter, $comment, $comment_date); $comments_save->Insert($fields,$placeholders,$binders,$values);
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
看起來代碼正在將字符串標量傳遞給bind_param
. 我想我們要傳遞數組的元素。
我們可以這樣做:
$stmt->bind_param(''.$binders.'', $values);
正如 Bill Karwin 正確指出的那樣,傳遞整個數組(如上一行)是行不通的,它與傳遞單個引用的原始數組存在相同的問題。語法應該導致該...
數組被解包,每個單獨的元素通過引用傳遞,元素數量可變。)
像這樣的東西:
$stmt->bind_param(''.$binders.'', ...$values);
對于通過綁定參數傳遞值,我們不需要將值括在單引號中。不需要這些行:
array_walk($values, function(&$x) {$x = "'$x'";}); $val = implode(', ', $values);
- 1 回答
- 0 關注
- 203 瀏覽
添加回答
舉報
0/150
提交
取消