这段代码有什么问题?选择计数和哪里?

时间:2014-01-27 13:48:26

标签: php mysql count rows

<?php 

require_once "includes/db_connection.php";

$sqlCommand = "SELECT * FROM table1 WHERE questionId = $id";

$query = mysqli_query($db_connection, $sqlCommand) or die (mysqli_error());

$num_rows = mysqli_num_rows($query);

echo "Tabela sadrzi " . $num_rows . " redova.";

mysqli_free_result($query);

mysqli_close($db_connection); 
?>

使用这种类型的代码,我有WHERE questionId = $id语句,它给我一个错误未定义的索引ID,而mysqli_error()只需要1个参数。我看到很多时间,不知怎的,我解决了一个问题,但现在我真的没有。我是新人,还在学习,但我真的没有想法。如果我删除它WHERE questionId = $id它正在工作,它会显示它中有多少行,但我需要使用Where语句,它可以显示给我,有多少记录是特定ID。

2 个答案:

答案 0 :(得分:0)

有两个问题和两个答案。

首先,您需要定义$id。它没有在您的页面上的任何位置定义。如果您要发布或获取变量,那么您将使用:

$id = $_POST['id'];

$id = $_GET['id'];

取决于其获取还是发布。

您还应该清理来自用户的任何输入,不要只是接受它会没事。最好的方法之一就是过滤它。

$id = filter_input(INPUT_POST, "id", FILTER_VALIDATE_INT);

如果int以外的任何内容都在ID中,那么将返回整数或FALSE


第二个问题是你的mysqli_error()。您需要传递资源链接,因此它应该是:

$query = mysqli_query($db_connection, $sqlCommand) or die (mysqli_error($db_connection));

答案 1 :(得分:0)

正如Fred所说,您可能有不同的PHP配置,其中request数据是自动预定义的。通常,您需要自己定义$id

<?php 

require_once "includes/db_connection.php";

# It might be ID or QUESTIONID or something similar
$id = $_POST['id'];
if ( !$id ) $id = $_GET['id'];

/* You can also add ' around your request,
to prevent error when the id is actually not present at all */
$sqlCommand = "SELECT * FROM table1 WHERE questionId = '$id'";

$query = mysqli_query($db_connection, $sqlCommand) or die (mysqli_error());

$num_rows = mysqli_num_rows($query);

echo "Tabela sadrzi " . $num_rows . " redova.";

mysqli_free_result($query);

mysqli_close($db_connection); 

?>

在使用之前不要忘记对它们进行消毒以防止sql injections