【问题标题】:MYSQL query WHERE php array [duplicate]MYSQL查询WHERE php数组[重复]
【发布时间】:2013-04-10 06:20:19
【问题描述】:

我有一个页面,用户可以在其中选择多个复选框,然后提交表单,在下一页上,它会显示他们检查的内容以及更多详细信息。但我的查询不起作用。如何将复选框数据传递给 mysql 查询以获取其余数据。

这是我的查询:

$c=$_POST['select'];

$result=mysqli_query($con, 'SELECT * FROM item WHERE item_number IN ("'.implode('","', $c).'")');

echo "<table border='1'>
<tr>
<th>item name</th>
<th>item number</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
  echo "<tr>";
  echo "<td>" . $row['item_name'] . "</td>";
  echo "<td>" . $row['item_number'] . "</td>";
  echo "</tr>";
 }
  echo "</table>";


mysqli_close($con);

运行查询时出现此错误:

警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,给定布尔值

它不返回任何结果,但是如果我回显查询并将其复制粘贴到 mysql 中,我会得到结果,但是当从 PHP 运行时,我只会得到错误。

任何帮助将不胜感激

【问题讨论】:

  • 为什么它不起作用?您从数据库或网络服务器得到的错误是什么?
  • 什么是 $c?此外,您应该通过 mysqli_real_escape_string() 运行所有值来真正保护您的数据库
  • 将 implode('","', $c) 更改为 implode(',', $c)
  • 尝试回显 $c 如果你得到一个值,你的问题得到了回答,你会得到一个值吗
  • 做一个 var_dump($c);帮助调试 propuses

标签: php mysql


【解决方案1】:

更新版本的代码以在查询中显示错误消息(如果有)。还清理输入

<?php
if (is_array($_POST['select']))
{
    $c = array_map('array_map_callback', $_POST['select']);

    $result = mysqli_query($con, 'SELECT item_name, item_number FROM item WHERE item_number IN ("'.implode('","', $c).'")') OR die(mysqli_error($con));

    echo "<table border='1'>
    <tr>
    <th>item name</th>
    <th>item number</th>
    </tr>";
    while($row = mysqli_fetch_array($result))
    {
        echo "<tr>";
        echo "<td>" . $row['item_name'] . "</td>";
        echo "<td>" . $row['item_number'] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
    mysqli_close($con);
}
else
{
    echo "No items selected";
}

function array_map_callback($a)
{
  global $con;
  return mysqli_real_escape_string($con, $a);
}

?>

希望这应该能够说明查询出了什么问题。

【讨论】:

    【解决方案2】:

    $c好像不是PHP数组,所以这里不能内爆

    【讨论】:

    • "如果我回显 ("'.implode('","', $c).'") 我得到值"
    • 你从 $_POST['select'] 得到什么样的数据类型 - 有效的 PHP 数组或字符串?
    • 是的,如果我回显它,它会打印我从表单中选择的所有值。
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2011-12-13
    • 1970-01-01
    • 2018-11-17
    • 2020-05-05
    • 1970-01-01
    • 2015-02-11
    • 2019-04-15
    相关资源
    最近更新 更多