2

我定义了 PHP 变量 $id ,其值是当前 Facebook 用户的 ID,从 Facebook API 调用返回的数组中提取。

$id = $userInfo[id]; 

我确信该变量已正确声明,因为我可以回显它的值并已成功将正确的值存储在数据库中。

我试图在 mysql 查询的 where 子句中使用它来从存储 ID 和其他数据的数据库表中返回记录,但未成功。查询返回预期的结果,直到我添加 where 子句,所以我认为这是我的语法与$id有关。我过滤的列也被命名为 id。我尝试过的语法都没有奏效,包括以下内容:

WHERE id = $id
WHERE id = '$id'
WHERE id = "$id"

在过去的几天里,我一直在寻找解决方案,并尝试了我在任何地方看到的单引号、双引号和小数的每一种组合。

编辑(代码取自作者的评论)

mysql_select_db($database_YOUR_giftbox, $YOUR_giftbox); 
$query_user_data = "SELECT date, event FROM events WHERE id = $id ORDER BY date ASC"; 
$user_data = mysql_query($query_user_data, $YOUR_giftbox) or die(mysql_error()); 
$row_user_data = mysql_fetch_assoc($user_data); 
$totalRows_user_data = mysql_num_rows($user_data); 
4

5 回答 5

2

我将假设一些事情并扩展您的示例。这是包含 PHP var 的完整查询的样子(非常基本的示例):

$query = "SELECT name, another_field FROM users WHERE id = " . $id;

那就是id你的数据库中的一个整数。如果由于某种原因它是某种字符串,那么:

$query = "SELECT name, another_field FROM users WHERE id = '" . $id . "'";

您还可以将 PHP 变量括在花括号中,如下所示(对于整数):

$query = "SELECT name, another_field FROM users WHERE id = {$id}";

或者这个(对于一个字符串):

$query = "SELECT name, another_field FROM users WHERE id = '{$id}'";

但是,如果您使用该方法,那么请注意整个$query声明需要包含在"而不是'.

于 2012-08-19T02:29:02.550 回答
1

由于您似乎刚刚开始使用 PHP 和 MySQL,因此请勿 mysql_query在任何新应用程序中使用。您的查询应类似于:

SELECT * FROM something WHERE id=?

它也可能看起来像:

SELECT * FROM something WHERE id=:id

这取决于您如何使用mysqli或 PDO 来进行SQL 转义。有几种方法可以做到这一点,所以找到最适合您风格的一种,并尝试始终如一地应用它。你不会后悔学习这项非常重要的技能。如果你忘记了没有它你会面临什么样的危险,你会后悔的。

让我感到害怕的是,人们零关注地给出“答案”,以确保查询始终有效,并且永远不会在您的应用程序中成为一个巨大的漏洞,只是等待有人使用自动 SQL 注入工具。

您应该能够编写您想要的查询类型,在mysql>命令行上对其进行测试,然后在您的应用程序中创建一个模板版本来完成完全相同的事情。MySQL 在涉及数字时通常非常随意,它们可以被引用或不被引用,它会根据需要进行转换,但字符串必须始终正确转义,否则可能会产生严重后果。

执行此mysqli操作非常简单:

$stmt = $db->prepare('SELECT * FROM something WHERE id=?');
$stmt->bind_param($id);
$stmt->execute();

这可能是最接近mysql_query函数族的。

于 2012-08-19T02:51:09.983 回答
0
$query = "SELECT * FROM `table_name` WHERE `id` = " . mysql_real_escape_string($id) . " ;"

应该是最正确的。确保 table_name 和 id 正确。

使用 ` 左刻度线可确保您不会运行受保护的 mysql 单词。

关于 facebook ID 的另一件好事是它们需要 BIGINT mysql 类型。数字对于 int 来说太大了!这在过去把我搞砸了。

祝你好运!

于 2012-08-19T02:29:47.570 回答
0

非常感谢大家的建议!

事实证明,我正在寻找的解决方案是我开始使用的解决方案,WHERE id = $id. 出于某种原因,Dreamweaver 的数据库测试正确返回了所有结果,但没有通过我的 where 子句过滤结果。我将它上传到我的远程服务器,它运行良好。

再次感谢!

于 2012-08-19T03:39:27.097 回答
-2
SELECT * WHERE 'ID' = $id;

此外,请确保您$id是一个实际的字符串变量,而不是ECHO返回索引 0 的字符串数组。

于 2012-08-19T02:15:01.137 回答