将数组发布到数据库:警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量不匹配

时间:2014-05-21 18:02:17

标签: php mysql arrays

我的php / mysql应用程序生成一个要插入数据库的数组。当我执行下面显示的插入查询时,插入不会发生,这些是我在浏览器中得到的错误:

*警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与第70行的C:\ wamp \ www \ useraccess \ desktop \ register.php中的绑定变量数量不匹配

*严格的标准:只有变量才能通过引用传递....

请提供建议让我解决此问题。

这是在Print_r()上返回的数组:

Array ( [lastname] => John [firstname] => Doe [email] => jdoe@yahoo.com [username] => terungwa [password] => encryptedpw) 

这是下面的插入查询代码:

    // initialize flag
      $OK = false;;
// initialize prepared statement
    $stmt = $mysqli->stmt_init();
// set up escape_quote function for use in array_map
        function escape_quote($value)
        {
          if(($value))
              {
                 $value = "'$value'"; // add quotes to string values
              }                  
                return $value;
        }
    $sql = 'INSERT INTO members (';
    $sql .= implode(',', array_keys($filtered)); // build column list
    $sql .= ') VALUES (?, ?, ?, ?, ?)';
    if ($stmt->prepare($sql))
    {
        // bind parameters and execute statement
        $stmt->bind_param('sssss', implode(',', array_map('escape_quote', array_values($filtered))));
        // execute and get number of affected rows
        $stmt->execute();
        if ($stmt->affected_rows > 0)
        {
         $OK = true;
        }
     }

3 个答案:

答案 0 :(得分:1)

我通过直接发布数组值而不是通过implode()函数解决了这个问题。

        $sql = 'INSERT INTO members (';
        $sql .= implode(',', array_keys($filtered)); // build column list
        $sql .= ') VALUES (?, ?, ?, ?, ?)';
        if ($stmt->prepare($sql))
        {
           // bind parameters and execute statement. insert array valuesis
           $stmt->bind_param('sssss', $filtered['lastname'], $filtered['firstname'], $filtered['email'], $filtered['username'], $hash);
           // execute and get number of affected rows
           $stmt->execute();
           if ($stmt->affected_rows > 0)
           {
             $OK = true;
           }
        }

答案 1 :(得分:0)

implode()返回一个字符串,因此您只发送1:一个字符串,其中您的实际值以逗号分隔。

答案 2 :(得分:0)

implode()使用字符串连接数组元素,只有1。 你需要在bind_param

上有5个参数