2

如何让我的查询的所有结果显示?如果我的 $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>";
?>
4

3 回答 3

2

glue缺少implode(). 没有它,你$query会看起来像这样:

SELECT * FROM estudos WHERE author='FooBarBaz'

这是一个语法上有效的 SQL 查询,但它并不能满足您的要求。

您可能正在寻找该 IN子句。

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

请注意,我尚未修复您查询中的SQL 注入漏洞。我建议您切换到 MySQLi 或 PDO 并开始使用参数化查询以防止 SQL 注入。

于 2013-11-06T19:16:49.087 回答
1

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

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

SQL IN 条件

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

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

    print_r ($author);
}
于 2013-11-06T19:18:53.473 回答
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)));
于 2013-11-06T19:23:31.393 回答