<?php
mysql_connect("localhost","root","");
mysql_select_db("hftwmvirtualdb");
$Booknum = mysql_real_escape_string($_POST['Booknum']);
$Chapternum = mysql_real_escape_string($_POST['Chapternum']);
$Versenum = mysql_real_escape_string($_POST['Versenum']);
$sql = mysql_query("SELECT `VERSETEXT` FROM `booktable` WHERE `BOOKID` = $Booknum AND `CHAPTERID` = $Chapternum AND `VERSENO` = $Versenum");
echo mysql_error();
while($row=mysql_fetch_assoc($sql));
print(json_encode($row));
mysql_close();
?>
我正在尝试使用来自Android应用程序的发布数据来触发查询并从mysql数据库中检索结果。表有4列,我试图通过定义前3列中的值来检索第三列中的值。每次我点击按钮,我都会得到解析错误,以找出我的PHP脚本没有处理SQL查询。通过浏览器运行脚本时,我收到消息:
CHAPTERID
= AND VERSENO
='附近使用正确的语法我理解我得到警告消息1-3是因为我没有提交帖子数据但后者我不知道如何解决,因为我尝试使用正确的语法,我尝试删除“=”为“像“那也失败了。有什么问题?。
答案 0 :(得分:2)
正如您指定的那样,undefined index
错误发生是因为您没有提交发布数据。反过来,这会导致变量$Booknum
,$Chapternum
和$Versenum
为空。
使用空变量,正在使用WHERE
子句生成MySQL查询,如:
WHERE `BOOKID` = AND `CHAPTERID` = AND ...
缺少的值导致MySQL无效,因此您的错误。另外,正如您已经指定(在注释中)POST值是字符串(而不是我根据其用法和名称假设的整数),您必须将值包装在MySQL查询中的引号中太。如果不将值包装在引号中,即使有效的字符串也可能导致查询失败。
要解决此问题,请尝试以下方法:
$Booknum = isset($_POST['Booknum']) ? mysql_real_escape_string(trim($_POST['Booknum'])) : null;
$Chapternum = isset($_POST['Chapternum']) ? mysql_real_escape_string(trim($_POST['Chapternum'])) : null;
$Versenum = isset($_POST['Versenum']) ? mysql_real_escape_string(trim($_POST['Versenum'])) : null;
if (!empty($Booknum) && !empty($Chapternum) && !empty($Versenum)) {
$sql = mysql_query("SELECT `VERSETEXT` FROM `booktable` WHERE `BOOKID` = '" . $Booknum . "' AND `CHAPTERID` = '" . $Chapternum . "' AND `VERSENO` = '" . $Versenum . "'");
echo mysql_error();
while($row=mysql_fetch_assoc($sql));
print(json_encode($row));
mysql_close();
}
这将验证值是否已正确设置 - 如果没有,它们将设置为null
。如果所有三个值都不为空,则通过PHP的empty()
,您的查询将被执行。
答案 1 :(得分:0)
您获得的“未定义索引”消息是因为未设置这些变量。检查您是否实际将这些内容发布到脚本中。
空变量是您的查询错误并且出错的原因。
答案 2 :(得分:0)
这是在以下代码中替换变量时SQL查询的样子:
SELECT `VERSETEXT` FROM `booktable` WHERE `BOOKID` = AND `CHAPTERID` = AND `VERSENO` =
当变量不包含任何内容时(如果您不提交数据则不会),查询没有意义:语法格式不正确。
在执行查询之前检查数据是否已过帐。此外,它还有利于您开始使用参数化查询(使用MySQLi或PDO)以确保安全性和便利性。
答案 3 :(得分:-2)
确定Post数据是否来,未定义索引这是因为,您使用的变量没有数据。首先验证它,然后执行SQL查询。
if(isset($_POST['Booknum']) && isset($_POST['Chapternum']) && isset($_POST['Versenum']))
{
$Booknum = mysql_real_escape_string($_POST['Booknum']);
$Chapternum = mysql_real_escape_string($_POST['Chapternum']);
$Versenum = mysql_real_escape_string($_POST['Versenum']);
$sql = mysql_query("SELECT `VERSETEXT` FROM `booktable` WHERE `BOOKID` = $Booknum AND `CHAPTERID` = $Chapternum AND `VERSENO` = $Versenum");
echo mysql_error();
while($row=mysql_fetch_assoc($sql));
print(json_encode($row));
}
else
{
echo "No post data";
}