3

好吧,我做了我的研究,但我似乎无法弄清楚这一点。长话短说,我正在使用这样的东西:

顺便说一句,“(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);

现在,这只是目前只是启动数据库连接。顺便说一句,我在这个网站上也找到了一个复制/粘贴代码,用于防止 MySQL 注入。实际上来自这个链接如何防止 PHP 中的 SQL 注入?. 如果它有任何问题,我不介意建议或提示。只要这有意义,因为我可能甚至不到一周前才开始使用数据库,所以一切对我来说都是新的。现在有这个:

$Exicu = $SQL -> prepare("SELECT `tags` FROM `users` WHERE `user_id` = :a ") -> execute(array( ':a' => 16));

$Exicu就在那里,因为我一直在尝试从查询中获取结果(如果我说得对的话)。16 也是用户 ID,但这会经常更改,所以这就是为什么 16 不只是被扔在准备语句中的原因。我尝试了很多东西,但都没有奏效。它要么不起作用,要么导致 PHP 崩溃。

但无论如何,我已经尝试过的事情$Exicu$Exicu->rowCount(), , 一个带有,$Exicu->bindParam的 while 循环, 一个带有, , ,和 just的循环。是的,我知道,这看起来很草率。$row = $Exicu->fetch()$SQL->query($Exicu)->fetchAll();foreach($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 注入的保护。

4

2 回答 2

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结果用作数组。

于 2013-02-13T21:57:29.300 回答
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());
}

但是当然最好是制作一组函数并将它们放在一个类中

于 2013-02-14T07:13:31.657 回答