我創(chuàng)建了一個(gè)查詢類來處理我所有的基本 sql 函數(shù),在類中我有一個(gè)基本函數(shù),它使用準(zhǔn)備好的語句插入數(shù)據(jù),即“插入”函數(shù),我不太清楚為什么,但我一直收到同樣的錯(cuò)誤(列出以上)每次我調(diào)用該函數(shù)時(shí)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(); }}這是用于將數(shù)據(jù)插入注釋表的函數(shù)的示例,連接來自模塊中包含的單獨(dú)數(shù)據(jù)庫文件 $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 回答

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