【问题标题】:Need to return/echo PHP PDO results from database需要从数据库返回/回显 PHP PDO 结果
【发布时间】:2013-02-13 21:48:58
【问题描述】:

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

顺便说一句,“(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 注入。实际上来自这个链接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 不只是被扔在准备语句中的原因。我尝试了很多东西,但都没有奏效。它要么不起作用,要么导致 PHP 崩溃。

但无论如何,我已经为$Exicu 尝试过的事情是$Exicu->rowCount()$Exicu->bindParam、带有$row = $Exicu->fetch()$SQL->query($Exicu)->fetchAll(); 的while 循环、带有($Exicu->fetch(PDO::FETCH_ASSOC) as $row)$Exicu->get_result()、@ 的foreach 循环987654333@、echo mysql_result($Exicu)echo $Exicu。是的,我知道,这看起来很草率。

但这些似乎都不能只显示特定用户数据库中的tags。所以这几乎就是我需要帮助的地方。当我使用 echo mysql_result( mysql_query("SELECT (etc,etc)") ) 这样的东西时没有问题,但它没有防止 MySQL 注入的保护。

【问题讨论】:

    标签: php database pdo


    【解决方案1】:

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

    【讨论】:

    • 我认为这是使我的 php 显示“500 内部服务器错误”的代码之一。我不知道为什么会这样。
    • 就个人而言,我从未遇到过通过 PDO 来自 SQL 语句的 500 错误代码。您确定这样的代码会导致该错误吗?
    • 确实如此。我只是复制/粘贴了我的前 3 行代码(除了我的网站数据库信息),然后将你的代码复制/粘贴到一个新的 php 文件中,我得到了同样的错误。不过,我网站的默认 php 是 php5.2。这可能是为什么?除此之外,我可能会问我的客户服务,因为我之前确实遇到过 php 问题。哪个会话不起作用。
    • 我不确定,我无法进一步帮助您,但代码很好,应该可以工作。我想联系您的房东是个好主意。
    • 我现在可以正常工作了(使用您的代码)。我以为我已经做了一个像你这样的代码,但我不确定发生了什么。但是,您目前的问题是while循环缺少最后一个“)”。不过还是谢谢。
    【解决方案2】:

    有一个东西叫做用户定义函数

    我想知道为什么这个网站上没有人使用它们。
    出于某种原因,每个人都准备好编写一英里长的单行链式方法,而不是简洁明了的函数调用:

    $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());
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多