我创建了一个查询类来处理我所有的基本 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 关注
- 235 浏览
添加回答
举报
0/150
	提交
		取消
	