php变量转换为mysql,其中


php variable to mysql where

我定义了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); 

我将假设一些事情并扩展您的示例。以下是包含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声明需要封装在"中,而不是'中。

由于您似乎才刚刚开始使用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函数族的。

非常感谢大家的建议!

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

再次感谢!

$query = "SELECT * FROM `table_name` WHERE `id` = " . mysql_real_escape_string($id) . " ;"

这将是最正确的。确保table_name和id正确无误。

使用"左勾号"可以确保您不会运行受保护的mysql单词。

关于facebookID还有一件值得注意的事情,那就是它们需要BIGINTMysql类型。这些数字对于int来说太大了!那件事过去把我搞砸了。

祝你好运!

SELECT * WHERE 'ID' = $id;

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

相关文章: