MySQL查询在包含时运行,但如果使用AJAX调用则不运行

时间:2015-08-12 15:18:28

标签: php mysql ajax

我对MySQL和AJAX有一个奇怪的具体问题。我正在尝试填充用户点击图片时显示的叠加层。

<!-- HTML -->
<img src="thePhoto.jpg" onclick="showStory(171)">
// JavaScript
function showStory(itemId){
     $.post("includes/stories.php", {item_id: itemId}, function(data){
          $("#overlay").prepend(data);
     })
}
// PHP
if($_POST["item_id"]){ 
     $sql = "SELECT * FROM item WHERE item_id = ".$_POST["item_id"];
     $result = mysqli_query($connection, $sql);
     echo $sql;
     while ($row = mysqli_fetch_assoc($result)){
          echo "query has run";
          echo $row["item_title"];
     }
}

当用户点击图像时,页面上会出现查询文本($ sql),但不会返回其他两个回波。似乎查询没有运行。

但如果我包含完全相同的代码,那么 就可以了。 (“171”是“$ _POST ['item_id']”中包含的数字。)如果我在页面上包含此代码,则会打印所有回声并正确显示:

//PHP
$sql = "SELECT * FROM item WHERE item_id = 171";
$result = mysqli_query($connection, $sql);
echo $sql;
while ($row = mysqli_fetch_assoc($result)){
     echo "query has run";
     echo $row["item_title"];
}

我已经确认这不是因为查询运行时的延迟。我已经确认这不是因为使用了POST变量。我已经确认这不是因为jQuery的怪癖;无论我是否使用jQuery,都会出现同样的问题。

我不知所措。使用AJAX调用时,为什么MySQL查询不会运行?

4 个答案:

答案 0 :(得分:0)

每次围绕一个循环你都会回应2个单独的事物。这可能会让某些地方感到困惑。此外,我不确定文件顶部是否有<?php

在删除调试回显

之后尝试从javascript运行它

看起来您可能也错过了数据库连接。

<?php
// PHP
// I think you may need to connect in this as a stand alone script
if(isset($_POST["item_id"])){ 
     $sql = "SELECT * FROM item WHERE item_id = ".$_POST["item_id"];
     $result = mysqli_query($connection, $sql);
     if ( ! $result) {
        echo 'The query failed with error ' . mysql_error();
        exit;
     }

     $return = '';
     while ($row = mysqli_fetch_assoc($result)){
          $return .= $row["item_title"];
     }
     echo $return;
} else {
     echo "An error occured item_id does not exist";
}
exit;

替代方案:查询很可能只返回一行,因为item_id在该表上是唯一的,所以如果是这样的话就试试

<?php
// I think you may need to connect in this as a stand alone script
if(isset($_POST["item_id"])){ 
     $sql = "SELECT * FROM item WHERE item_id = ".$_POST["item_id"];
     $result = mysqli_query($connection, $sql);
     if ( ! $result) {
        echo 'The query failed with error ' . mysql_error();
        exit
     }

     $row = mysqli_fetch_assoc($result);

     echo $row["item_title"];
} else {
     echo "An error occured item_id does not exist";
}
exit;

答案 1 :(得分:0)

TLDR;你的问题出现在后超级全球。

  

当用户点击图像时,页面上会出现查询文本($ sql),但不会返回其他两个回波。似乎查询没有运行。

如果您看到第一个回声,则表示查询已运行。运行查询mysqli_query的{​​{1}}只会抓取结果。如果你没有看到第二个和第三个回声,则意味着mysqli_fetch_assoc的返回值的计算结果为假 - 如果你查看函数的文档,只有在没有更多的情况下才会看到它返回mysqli_fetch_assoc要获取的记录。

牢记上述内容,你说硬编码的价值是有效的,那么这不会让你认为false可能有问题吗?也许这不是你期望的数字。

答案 2 :(得分:0)

问题解决了!谢谢大家。

问题是$ connection变量。当我在页面上包含代码时,它可以访问$ connection的定义,该定义在页面的更上方定义。当我用AJAX调用它时,它与该定义隔离,因此$ connection为null。

我现在已经在自己的文件中定义了$ connection,并将该文件包含在AJAX调用的脚本中。

//PHP
include ("database.php");
if($_POST["item_id"]){ 
    $sql = "SELECT * FROM item WHERE item_id = ".$_POST["item_id"];
    $result = mysqli_query($connection, $sql);
    $row = mysqli_fetch_assoc($result);
    echo $row["item_title"];
}

回想起来似乎很明显。我已经习惯了JavaScript,而且我忘记了在脚本运行完毕后PHP不会保留变量的值。

答案 3 :(得分:-1)

你有var_dump $ result和$ connection吗? 是否有任何其他东西使$ connection为null?