PHP - 无法从数据库中检索数据

时间:2014-04-23 14:42:37

标签: php mysql

由于某种原因,通过PHP运行时的查询不会返回结果。我在MySQL命令行中尝试了两个查询,它们在那里工作得很好。这是代码(mysql_connect.php工作正常,澄清)。

<?php 
error_reporting(-1);
// retrieve email from cookie 
$email = $_COOKIE['email'];

// connect to mysql database
require('mysql_connect.php');

// get user_id by searching for the email it corresponds to
$id = mysqli_query($dbc,"SELECT user_id FROM users WHERE email=$email")or die('couldn\'t get id');

// get data by using the user_id in $id
$result = mysqli_query($dbc,"SELECT * FROM users WHERE user_id=$id")or die('couldn\'t get data');

//test if the query failed
if($result === FALSE) {
die(mysql_error());
echo("error");
}

// collect the array of results and print the ones required
while($row = mysql_fetch_array($result)) {
echo $row['first_name'];
}
?>

当我运行脚本时,我收到消息&#34;无法获取id&#34;,但该查询在MySQL命令行和PHPMyAdmin中有效。

3 个答案:

答案 0 :(得分:1)

您的查询无效,您应该使用以下内容重写它,并确保在将mysqli_real_escape_string$email SELECT user_id FROM users WHERE email='$email' 之前将其置于查询中:

$stmt = mysqli_prepare($dbc, "SELECT user_id FROM users WHERE email = ?");
mysqli_stmt_bind_param($stmt, "s", $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $id);
mysqli_stmt_fetch($stmt);

更好的方法是使用MySQLi prepared statements重写您的查询:

以下是如何获取$ id值:

{{1}}

答案 1 :(得分:1)

您的代码因两个原因而无法工作 - $id不会神奇地变成整数,而是一个mysqli结果。电子邮件是一个字符串,因此应该引用它。

但是...

为什么这一切?

如果您想获取用户的所有数据,对于某些电子邮件,只需通过电子邮件进行第二次查询获取数据并删除第一个:

SELECT * FROM users WHERE email='$email';

并且不要忘记逃避你的意见,因为它在cookie中。或者,按照建议使用准备好的陈述。

答案 2 :(得分:0)

你写了

mysqli_query($dbc,"SELECT user_id FROM users WHERE email=$email");

类似于

mysqli_query($dbc,"SELECT user_id FROM users WHERE email=example@example.com");

但它应该是

mysqli_query($dbc,"SELECT user_id FROM users WHERE email='example@example.com'");

所以你必须这样做

mysqli_query($dbc,"SELECT user_id FROM users WHERE email='$email'");

或更好

mysqli_query($dbc, 'SELECT user_id FROM users WHERE email=\'' . $email . '\'');

除了这个小错误 如果有人更改了您的Cookie值,您应该知道SQL injection