【问题标题】:Echo last 10 results of mysql database using pdo使用 pdo 回显 mysql 数据库的最后 10 个结果
【发布时间】:2013-12-31 21:37:00
【问题描述】:

我正在尝试使用 pdo 回显我的数据库中的最后 10 个项目。但是我不断收到查询失败。但是,当我在最底部执行代码 sn-p 时,我只能得到数据库中的最后一项。

$db2 = new PDO('mysql:host='. $host .';dbname='.$db_name_uroll, $db_username, $db_password);

$statement2 = $db2->prepare("select * from `{$user}` ORDER BY bet_id DESC LIMIT 2");    


if ($stmt = $db2->query($statement2)) //PDO::query() returns a PDOStatement on success or false on failure.
{
    //If we got a PDOStatement as a return value from PDO::Query() !!!ECHO WHILE FETCHING!!! 
    while($row2 = $stmt->fetch(PDO::FETCH_ASSOC)) //This loop will keep going for as many rows as the PDOStatement returns.
    {
        echo $row2['roll'] . "<br />";
    }
}
else
{
    //If PDO::Query returned false, then something is wrong with our query. Or connection or whatever.
     echo "Query failed.";
}

但是当我在下面执行此操作时,它会起作用,但只会打印出最后一项

$row2 = $statement2->fetch();
echo $row2[roll];

【问题讨论】:

  • 如果你正在准备你的语句,你应该使用db2-&gt;execute(),而不是db2-&gt;query(),但由于你实际上并没有绑定任何变量,你可以将你的查询字符串输入db2-&gt;query()。我认为您需要阅读更多关于 PDO 和准备好的陈述的内容。
  • 您想echo the last 10,但您的查询中有LIMIT 2
  • @Sean 我打算做 10 我只是放了 2 来测试一些东西

标签: php mysql database pdo


【解决方案1】:

您需要删除 prepare 语句。并直接在查询函数中运行查询。

    $db2 = new PDO('mysql:host='. $host .';dbname='.$db_name_uroll, $db_username, $db_password);

//Remove $db2 prepare
$statement2 = "select * from `{$user}` ORDER BY bet_id DESC LIMIT 2";    


if ($stmt = $db2->query($statement2)) //PDO::query() returns a PDOStatement on success or false on failure.
{
    //If we got a PDOStatement as a return value from PDO::Query() !!!ECHO WHILE FETCHING!!! 
    while($row2 = $stmt->fetch(PDO::FETCH_ASSOC)) //This loop will keep going for as many rows as the PDOStatement returns.
    {
        echo $row2['roll'] . "<br />";
    }
}
else
{
    //If PDO::Query returned false, then something is wrong with our query. Or connection or whatever.
     echo "Query failed.";
}

此代码正在运行。

文档链接:http://www.php.net/pdo.query

使用prepare你必须使用execute方法。

http://www.php.net/manual/en/pdo.prepare.php

【讨论】:

  • 您是否删除了准备语句?并在查询函数中运行您的查询?您可以回显或打印您的查询吗?
  • 请在 if 语句中回避。 if ($stmt // 这样你就可以看到控制是否至少进入 if.
  • 是的,我也复制并粘贴了上面的代码以防万一。 $statement2 有效,但回显 $stmt 没有任何效果。
  • 对不起,我没有让你明白。回显 $stmt????。 echo $statement2 here 然后在 phpmyadmin 中运行此查询。如果运行正常,则在 while 循环内回显。任何回声“你好”。如果有任何错误,请告诉我。
  • echo $statement2 工作正常。当我在 while 循环中回显时,不会打印任何内容。当我在 if 语句中回显时,也没有打印任何内容。
【解决方案2】:

这是经过测试的代码。

$dbhost = "localhost";
$dbname = "pdo";
$dbuser = "root";

$con = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser);
echo $select = "SELECT * FROM books ORDER BY id DESC LIMIT 10";
$query = $con->prepare($select);
$query->execute();
$query->setFetchMode(PDO::FETCH_BOTH);
while($row = $query->fetch()) {
    echo '<pre>';print_r($row);echo '</pre>';
}

或者你可以这样做

if($query->execute()) {
   $query->setFetchMode(PDO::FETCH_BOTH);
   while($row = $query->fetch()) {
       echo '<pre>';print_r($row);echo '</pre>';
   }
} else {
    echo "Query failed";
}

【讨论】:

  • 尝试了第一个,没有得到任何结果。在第二部分添加,我仍然得到 Query failed.
  • $db2 = new PDO('mysql:host='. $host .';dbname='.$db_name_uroll, $db_username, $db_password);这是你的代码,这是我的代码 $con = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser);从 $host 变量和 $db_name_uroll 中删除单引号,然后检查。
  • 在选择查询中{$user} 是什么,这应该是表名。
  • 回显您的查询,它将在浏览器上打印,然后将其复制并粘贴到 sqlyog 并尝试执行它,看看发生了什么。
猜你喜欢
  • 2013-01-06
  • 2015-03-11
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2015-10-08
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多