我的php/mysql应用程序生成一个数组插入到数据库中。当我执行如下所示的插入查询时,插入没有发生,下面是我在浏览器中得到的错误:
*警告:mysqli_stmt::bind_param():类型定义字符串中的元素数量与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;
}
}
我通过直接发布数组值而不是通过内爆()函数解决了这个问题。
$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;
}
}
implode()
返回一个字符串,所以不是5个值,您只发送1:一个字符串,其中您的实际值由逗号分隔。
implode()将数组元素与字符串连接,只有1。bind_param