有人在很多时候为我写了一个PHP程序,现在我在运行代码时遇到了这个错误:
<option value="value1" disabled>value1</option>
期望参数2为字符串,数组 在...中给出。
我无法解决这个问题:
mysqli_real_escape_string()
我这样用它:
function db_array_update($table, $a, $where)
{
$q = "update $table set ";
$b = NULL;
foreach($a as $key => $value)
{
if (is_int($key))
continue;
$con = mysqli_connect("localhost", MYSQLUSER , MYSQLPASS, MYSQLDB);
$b[] = "$key='".mysqli_real_escape_string($con, $value)."'";
}
$q .= implode(",", $b);
$q .= " where ".$where;
db_query($q);
}
有人可以帮我解决这个问题吗? 试了很多东西,但没有工作......
答案 0 :(得分:1)
作为$a
传递给您的函数的内容必须具有一个或多个数组本身的数组值。如果$value
是数组,则会出现此错误,即。你有一个多维数组而不是简单的键/字符串对。
在函数内部var_dump($a)
查看哪个数组值是数组。此外,您传递的数据中有一些蠢事:
db_array_update("all_data",array(
'last_fetched' => date("Y/m/d H:i:s"),
'name'=>$name, // May be an array?
'creation'=>$creat, // May be an array?
'expiration' =>$expire, // May be an array?
), // Need this closing ) to end the array.
"id=".$res['id'] // This one should be outside the array!
);
此外,您需要在'id='
位之前关闭数组,以便$where
条件传入,您在那里有未闭合的括号。
...实际上,你的代码在这个问题之外充满了各种各样的功能。在这里研究答案。如果这是代码的代表性样本,则有人应该重写您的数据库功能。
答案 1 :(得分:0)
使用mysqli是错误的。 mysqli的全部好处已减少到零。有关示例,请参阅http://php.net/manual/en/book.mysqli.php。
纠正部分代码:
这些可能的更正之后的代码:
function db_array_update($table, $a, $where)
{
$q = "update $table set";
$b = NULL;
$c=null;
$con = mysqli_connect("localhost", MYSQLUSER , MYSQLPASS, MYSQLDB);
foreach($a as $key => $value)
{
if (is_int($key))
continue;
$b[]="$key=?";
}
$q .= implode(",", $b);
$q .= " where ".$where;
$stmt = $mysqli->prepare($q);
foreach($a as $key => $value)
{
if (is_int($key))
continue;
$stmt->bind_param($key, $value);
}
$stmt->execute();
$stmt->close();
}
这仍然不合规: