由于某种原因,通过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中有效。
答案 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。