如果选择了多个值,则Array不会从mysql返回任何内容

时间:2013-11-06 19:14:05

标签: php mysql arrays implode

如何显示查询的所有结果?如果我的$ author打印为Array([0] => 1),则查询会提取正确的数据。但是,如果我的$ author打印为Array([0] => 1 [1] => 8)或从我的表单收到的值的任意组合,则返回空。

阵列打印正确,所以我从那一点开始前进,假设问题是查询,但无法弄明白。

$query = "SELECT * FROM estudos";
if (isset($author)){
    $query.=" WHERE author='" . implode ($author) ."'";
    print_r ($author);
}

这是我的php和html ......

$results=$dbclient->query($query) or die(mysqli_error());

<?php 
while($row=mysqli_fetch_array($results))
    echo"<tr><td class='name'>$row[name]</td>";
?>

3 个答案:

答案 0 :(得分:2)

您错过了implode()glue参数。没有它,你的$query看起来像这样:

SELECT * FROM estudos WHERE author='FooBarBaz'

这是一个语法上有效的SQL查询,但它不能做你想要的。

您可能正在寻找IN条款。

$query .= " WHERE author IN (" . implode (',', $author) .")";

请注意,我没有修复查询中的SQL injection个漏洞。我建议您切换到MySQLi或PDO并开始使用参数化查询以免SQL注入。

答案 1 :(得分:1)

您需要在SQL查询中使用IN条件

$query.=" WHERE author IN (" . implode (',',$author) .")";

SQL IN Condition

如果作者是字符串,则代码将是

 if (isset($author)){
$query . = "("
foreach ($author as $value)
{
    $query .= "'".$value."',";
}
$query = substr($query,0,-1);
$query .= ")";

    print_r ($author);
}

答案 2 :(得分:0)

可能作者姓名将是字符串,您应该将其格式化,如下所示

    IN ('author1', 'author2')

一个可以帮助你的PHP功能

function quote($str) {
    return sprintf("'%s'", $str);
}
$authors = array('author1', 'author2', 'author3');
WHERE author IN (implode(',', array_map('quote', $authors)));