我的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;
}
}
答案 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个参数