我正在使用PHP与MySQL一起开发Web应用程序。我在另一个页面上成功查询了数据库,并将结果返回到动态创建的表中。在这种情况下,我只需要从数据库中获取一个名称。
我使用相同的基本原则,我试图将结果分配给变量,但它对我进行了轰炸。我知道我的联系很好。我直接在PhpMyAdmin中运行查询,它可以工作。
以下是代码:
<?php
$con=mysqli_connect("....");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$id_num = mysqli_real_escape_string($con, $_POST['id_num']);
$username = mysqli_real_escape_string($con, $_POST['username']);
$result = mysqli_query($con,"SELECT NAME FROM users where ID ='".$id_num."' AND username='".$username."'");
$row = mysqli_fetch_array($result));
$name = $row['NAME'];
echo $name;
mysqli_close($con);
?>
它给出的错误是:
解析错误:语法错误,意外&#39;)&#39;在第14行的D:\ Hosting \ 8715276 \ html \ delta \ login.php
我确定这是因为我对php不熟悉。我已经找到了如何做到这一点的细节,但我并没有真正转变太多。我调查了mysqli_fetch_array,但php.net上的示例打印并且不分配给变量。我有点想过(在他们的例子中)这是否有效:
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
然后
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$name = $row['NAME'];
echo $name;
同样应该工作。它不是。任何建议或链接都会有所帮助。我一直在看 http://php.net/manual/en/mysqli-result.fetch-array.php
答案 0 :(得分:3)
第14行你有一个额外的右括号(正如错误所说):
$row = mysqli_fetch_array($result));
应该是:
$row = mysqli_fetch_array($result);
答案 1 :(得分:1)
弹出的一件事是
$row = mysqli_fetch_array($result));
应该是:
$row = mysqli_fetch_array($result);
在行尾注意括号。
答案 2 :(得分:1)
经过一些测试后,我得出了一些结论,即你没有为你的列使用正确的字母大小写,包括WHERE
子句中的(用户名)列。
您在选择NAME
而非username
以及另一段代码name
中注意到$row["Name"]
。
确保您的专栏名称确实是name
而不是NAME
或username
,这取决于您选择的方式/内容,有关此内容的更多信息可在下方找到
以下是您的代码,顺便说一下mysqli_fetch_array($result));
$result = mysqli_query($con,"SELECT NAME FROM users where ID ='".$id_num."'
AND username='".$username."'");
$row = mysqli_fetch_array($result));
$name = $row['NAME'];
echo $name;
这就是我的结论(作为诊断):
$result = mysqli_query($con,"SELECT name FROM users where ID ='".$id_num."'
AND name='".$username."'");
$row = mysqli_fetch_array($result);
$name = $row['name'];
echo $name;
但是,当您SELECT column
时,$row['column']
必须与您选择的匹配。
这样做:
SELECT NAME
和$row['NAME']
可行,但不是SELECT NAME
和$row['name']
。
与您的WHERE
条款一起使用。
将error reporting添加到文件的顶部,这有助于查找错误。
error_reporting(E_ALL);
ini_set('display_errors', 1);
旁注:错误报告应仅在暂存时完成,而不是生产。
将or die(mysqli_error($con))
包括在mysqli_query()
。
另外,正如你在Shomz的答案中所说的那样:
“我已将其缩小为我的SQL查询中的内容。如果我用静态输入替换ID ='".$id_num."' AND username='".$username."'");
,则可以正常工作。”
这告诉我您可能没有正确分配变量。也许是一个未命名的表单元素,或者根本没有变量。很难说是肯定的,因为你的问题没有显示足够的信息来确定(HTML表单本身),但这些都是可能的情况。
使用错误报告会发出未定义的索引和/或未定义的变量。
如果您的表单元素分别不包含name="id_num"
和name="username"
,那么这将是您的代码失败原因的另一个可能原因。