PHP和MySQL动态查询只返回没有where子句的结果

标签 php mysql

我希望有人可以协助使用 PHP 进行动态查询。下面的第一页显示了 MySQL 中的许多项目。单击某个项目后,它会转到另一个页面,该页面查询数据库以显示所选产品的详细信息。显示用户可以选择的项目的页面工作正常,但显示单击的项目的页面仅在我删除 WHERE 子句时才有效,但当然它不再是动态的。错误语句表明语法不适合该版本,但它在其他页面上有效。使用 MySQL 5.6.17 和 PHP 5.5.12。

谁能看出我哪里出了问题吗?

--------------------------------

主页(按预期运行)

    <?php
ini_set('display_errors', '0');
$message = '';
$db=new MySQLi('localhost', 'someone', 'xxx','abc');
if ($db->connect_error) {
$message = $db->connect_error;
} else {
$sql = 'SELECT * FROM items';
$result = $db->query($sql);
if ($db->error) {
    $message = $db->error;
}
}
?>
<!--other parts of the site--->
        <?php if ($message) { ?>
            <h2 class="inline_block">Sorry, there seems to be a problem.</h2>
        <?php } else { ?>
        <div>
        <?php 
        $i = 0;
        while ($row = $result->fetch_assoc()) {
            if ($i % 4 === 0) { ?>
            <div>
                <ul>
                <?php } ?>
                    <li> <a href="includes/details.php?id=<?php echo $row['itemID']; ?>"> <img src="img/<?php echo $row['image']; ?>" alt="<?php echo $row['alt']; ?>" height="150" width="150">
            <p><?php echo $row['product']; ?></p>
            <p class="reset">From $<?php echo $row['water']; ?></p></a> </li>
               <?php $i++;
               if ($i % 4 === 0) { ?>    
                </ul>
                </div>
            <?php } // end if 
            } // end of loop ?>
        </div>
        </div>
        <?php } // end of page ?>
      </div>
<!--other parts of the site--->

------------------------------------------------------------ ------------------

动态页面(返回 SQL 错误“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行 '' 附近使用的正确语法”。第 1 行首先相同如下所示的行。这也用在上一页中,没有问题。当从 SQL 查询中删除 WHERE 子句时,它可以工作,但不再是动态的。)

    <?php
ini_set('display_errors', '0');
$message = '';
$db=new MySQLi('localhost', 'someone', 'xxx','abc');
if ($db->connect_error) {
$message = $db->connect_error;
} else {
$sql = 'SELECT * FROM items WHERE xitemID=' . $db->real_escape_string($_GET['xitemID']);
$result = $db->query($sql);
if ($db->error) {
    $message = $db->error;
} else {
    $row = $result->fetch_assoc();
    }
 }
 ?>
<!--other parts of the site--->

        <ul>
            <li><a href="../index.php">Home</a></li>
            <li><a href="../things.php">Things</a></li>
            <li><a href="mixeda.php">Mixeda</a></li>
            <li><?php echo $row['product']; ?></li>
        </ul>
    </div>
    <div id="col_1" role="main">
    <?php if ($message) { ?>
    <p> ERROR</p>
        <?php echo "<p>$message</p>";
        } else { ?>

        <h2 class="inline_block"><?php echo $row['product']; ?></h2>          
        <p class="figure"><img src="../img/<?php echo $row['image']; ?>" alt="<?php echo $row['alt']; ?>" width="200" height="200">Price from $<?php echo $row['product']; ?></p>

    </div>
    <div id="col_2">
    <h3>Details</h3>
    <p><?php echo $row['details']; ?></p>
    </div>
    <?php } ?>
<!--other parts of the site--->

最佳答案

请注意,您需要在 xitemID='itemHere' 中的项目两边加上单引号:

$sql = "SELECT * FROM items WHERE xitemID='" . $db->real_escape_string($_GET['xitemID']) . "'";

只要定义了 $_GET['xitemID'] 就可以解决您的问题。

关于PHP和MySQL动态查询只返回没有where子句的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415014/

相关文章:

php - Laravel Eloquent - 查询数据透视表

php - 获取最新的 8 条记录 laravel 5.1

php - 在 PHP 中使用关联数组构造 UPDATE 语句

mysql - 如何在ubuntu Linux中运行 Crystal 报表

java - 如何将具有文本数据类型的数据库字段中的 java 日期 toString 值格式化为 mysql 日期表示形式?

php - SQL JOINS检索并显示两次

php - TCP 套接字是否持久?

MySql 数据透视不压缩分组行

mysql - 在 MySQL 中创建与另一个表匹配的表?

mysql - 创建一个 preg_match 过滤器,以便只有没有重复的新 facebook 粉丝页面被添加到 sql 数据库