为什么我会收到此错误,警告:mysqli_stmt::bind_param():

我创建了一个查询类来处理我所有的基本 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);


LEATH
浏览 159回答 1
1回答

长风秋雁

看起来代码正在将字符串标量传递给bind_param. 我想我们要传递数组的元素。我们可以这样做:$stmt->bind_param(''.$binders.'', $values);正如 Bill Karwin 正确指出的那样,传递整个数组(如上一行)是行不通的,它与传递单个引用的原始数组存在相同的问题。语法应该导致该...数组被解包,每个单独的元素通过引用传递,元素数量可变。)像这样的东西:$stmt->bind_param(''.$binders.'', ...$values);对于通过绑定参数传递值,我们不需要将值括在单引号中。不需要这些行: array_walk($values, function(&$x) {$x = "'$x'";});   $val = implode(',  ', $values);
打开App,查看更多内容
随时随地看视频慕课网APP