繁体   English   中英

PHP错误:数组到字符串的转换

[英]PHP error : Array to string conversion

我有一个用HTML代码集命名的PHP文件,此代码用于显示要为下一个过程选择的多个位置ID(窗体为GET)。

$sqloc = mysql_query("SELECT loc_id FROM location");
while ($row = mysql_fetch_array($sqloc)){

echo "<tr><td>
    <label><input type=\"checkbox\" name=\"chk_loc[]\" value=". $row['loc_id'] ." />
</td><td>" . $row['loc_id'] . "</td></tr></label>"; }

然后在其他PHP文件中,我使用此代码使用之前的复选框根据所选ID选择数据。

$cbarray = array();
if (isset($_GET['submit_location'])) {
  $cbarray = $_GET['chk_loc']; }

for ($i=0; $i<count($cbarray); $i++) {
  $sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
      while($ccb= mysql_fetch_row($sqlcb)) {
                print_r($ccb); }
}

但是当我运行它时,它会出现通知:

第62行上....的数组到字符串的转换

在($ sqlcb = mysql_query)部分的第62行上。 我已经使用var_dump来检查数组,并且它像这样打印数组:

array(4) { [0]=> string(5) "LO001" [1]=> string(5) "LO003" [2]=> string(5) "LO004" [3]=> string(5) "LO005" } 

反正有解决这个问题的方法吗? 谢谢。

php中的Checkbox作为数组处理。 在此代码中,标识为chk_loc的复选框作为数组存储在$ cbarray中。 $sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'"); 在这段代码中,where子句接受一个字符串,并且您正在提供一个数组。

并使用PDO防止SQL注入PDO PHP

问题是因为这样的说法,

$sqlcb = mysql_query("SELECT * FROM location WHERE loc_id = '$cbarray'");
                                                                 ^ see here

$cbarray实际上是一个数组,而不是字符串。 您可以使用var_dump($cbarray);来查看其结构var_dump($cbarray);

因此解决方案是:

使用implode()函数将字符串与数组元素连接起来,并在查询中使用它,如下所示:

$cbarray = array();
if (isset($_GET['submit_location'])) {
    $cbarray = $_GET['chk_loc'];

    $query = "SELECT * FROM location WHERE loc_id IN ('" . implode("','", array_map('mysql_real_escape_string', $cbarray)) . "')";
    $sqlcb = mysql_query($query);
    while($ccb= mysql_fetch_row($sqlcb)) {
        print_r($ccb); 
    }
}

旁注:不要使用mysql_*函数,从PHP 5.5开始不推荐使用它们,并在PHP 7.0中将其完全删除。 改用mysqlipdo 这就是为什么您不应该使用mysql_*函数的原因

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM