PHP Mysqli从表中选择*,其中category =。$ _ GET [" id"];什么都不打印,即使表格内容具有相同的id值

时间:2017-07-31 10:21:19

标签: php mysqli

我一直在尝试从db表中获取数据,其中发布的id值为:

<a href="page.php?id=category">

现在当我点击此链接时,它会将我重定向到&#34; page.php&#34;使用sql查询:

<?php 
    $sql2 = "SELECT * FROM table WHERE category = ".$_GET["id"];
    $result2 = $conn->query($sql2);
    if ($result2['num_rows'] > 0) {                               
    while($row2 = $result2->fetch_assoc()) {                                                    ?>

<?php echo ($row2['category']); ?>

即使我的表中包含类别为类别的内容,仍然没有打印任何内容..没有错误。

显示空白页面,因为我可以看到id被传递但我的查询有问题。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

<强>更改

1) if ($result2['num_rows'] > 0) {if ($result2->num_rows > 0) {

2)使用预准备语句来避免SQL注入

更新代码

<?php 
$result2 = $conn->prepare("SELECT * FROM table WHERE category = :id");
$result2->execute(array(':id' => $_GET['id']));
if ($result2->num_rows > 0) {                               
  while($row2 = $result2->fetch_assoc()) {?>
    <?php echo ($row2['category']); ?>

有用的链接

  1. mysqli_result::$num_rows
  2. PDO::prepare

答案 1 :(得分:0)

SQL字符串必须用'个字符分隔。

即。您的查询应该是:

SELECT * FROM table WHERE category = 'category'

而不是

SELECT * FROM table WHERE category = category

如果您使用支持占位符语法的数据库API,则此问题(以及您的overflow specification)将消失:

SELECT * FROM table WHERE category = ?