显示mysql查询的内容,只有第一个字段有效

时间:2009-04-08 21:01:47

标签: php mysql mysqli prepared-statement

我正在使用带有php的mysqli prepard查询,代码为:

$retreiveQuery = 'SELECT username, firstname, lastname FROM USERS WHERE username = ?';

if ($getRecords = $con->prepare($retreiveQuery)) {
    $getRecords->bind_param("s", $username);

    $getRecords->execute();        
    $getRecords->bind_result($username, $firstname, $lastname);

echo "<h1>".$username."</h1>
<p><strong>First Name: </strong>".$firstname."
<p><strong>Surname: </strong>".$lastname."
} else {
print_r($con->error);

这很奇怪。 username是唯一显示的字段。为什么其他列不被返回/绑定?

如果我这样做

SELECT username, firstname, lastname FROM USERS WHERE username = 'test';

直接向数据库显示所有字段,并且所有字段都包含有效数据。

3 个答案:

答案 0 :(得分:1)

如果您使用其他变量名称输出用户名,会发生什么?像这样:

SELECT username as user_name,firstname,lastname FROM USERS WHERE username ='test';

然后

$ getRecords-&gt; bind_result($ user_name,$ firstname,$ lastname);

我想知道输入和输出使用相同的名称是否会让人感到困惑?

答案 1 :(得分:1)

我没有运行它,但我注意到你使用相同的变量,$ username用于绑定的param和绑定的结果变量。

可能是结果没有返回任何一个,但$ username显示的值是因为您事先分配它,而不是因为它来自数据库。

尝试使用$ param_user和$ result_user等不同的变量,看看会发生什么。我的猜测是没有返回任何结果,这将指出查询或结果绑定的问题。

答案 2 :(得分:1)

你必须致电

$getRecords->fetch();
bind_result()实际获得记录后

正在输出用户名,因为您已经设置了它,以用作输入参数。