我对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查询不会运行?
答案 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?