嗯,我做过我的研究,我似乎无法弄清楚这一点。长话短说,我正在使用这样的东西:
btw,“(WebsiteInfo)”只是为了传感我的网站/数据库信息。
$SQL = new PDO('mysql:dbname=(WebsiteInfo);host=(WebsiteInfo);charset=utf8', '(WebsiteInfo)', '(WebsiteInfo)');
$SQL -> setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$SQL -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
现在,这只是为了启动数据库连接。哪个btw主要只是我在这个网站上发现的复制/粘贴代码,这是为了防止MySQL注入。实际上来自这个链接How can I prevent SQL injection in PHP?。如果它有任何问题,我不介意建议或提示。只要它有意义,因为我刚开始使用数据库可能甚至一周前都没有,所以一切对我来说都是新的。现在有这个:
$Exicu = $SQL -> prepare("SELECT `tags` FROM `users` WHERE `user_id` = :a ") -> execute(array( ':a' => 16));
$Exicu
就在那里,因为我一直试图从查询中得到结果(如果我说的那么正确)。 16也是用户ID,但这会经常改变,这就是为什么16不只是在prepare语句中被抛出。我尝试了很多东西,但没有一个能奏效。它要么不起作用,要么使PHP崩溃。
但无论如何,我已经为$Exicu
尝试过的事情是$Exicu->rowCount()
,$Exicu->bindParam
,一个带有$row = $Exicu->fetch()
,$SQL->query($Exicu)->fetchAll();
,foreach
的while循环}循环($Exicu->fetch(PDO::FETCH_ASSOC) as $row)
,$Exicu->get_result()
,echo PDO::query($Exicu);
,echo mysql_result($Exicu)
和echo $Exicu
。是的,我知道,这看起来很草率。
但这些似乎都不能仅仅显示特定用户数据库中的tags
。所以这几乎是我需要帮助的地方。当我使用像echo mysql_result( mysql_query("SELECT (etc,etc)") )
这样的东西时没有问题但是没有MySQL注入的保护。
答案 0 :(得分:5)
我这样做我的PDO查询:
$user_id = 16;
$query = $SQL->prepare('SELECT tags FROM users WHERE user_id = :uid');
$query->bindValue(':uid', $user_id, PDO::PARAM_INT);
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC))
{
echo $row['tags'];
}
这将从数据库中选择数据,安全地绑定其中的值,然后我们回显结果。
需要循环来遍历查询返回的每个结果。您可以跳过循环部分并在while
语句中创建变量,并将$row
用作结果的数组。
答案 1 :(得分:0)
有一个名为用户定义函数的东西。
我想知道为什么这个网站上没有人使用它们 出于某种原因,每个人都准备好制作一英里长的单行链接方法,而不是干净简洁的函数调用:
$user_id = 16;
$tags = getone('SELECT tags FROM users WHERE user_id = ?',array($user_id));
有很多方法可以创建这样的功能。一个快速而肮脏的人
function getone($sql, $data) {
global $SQL;
$stmt = $SQL->prepare($sql);
$stmt->execute($data);
return reset($stmt->fetch());
}
但当然最好制作一组功能并将它们放在一个类
中