【问题标题】:How to show all DB result with PDO如何使用 PDO 显示所有 DB 结果
【发布时间】:2017-07-30 18:14:38
【问题描述】:

所以, 我刚开始使用 PDO,连接和东西工作得很好,但现在我有一个小问题。我被困在我想在每张桌子上显示 6 个结果的地方。我的代码如下:

<?php
$sql = "SELECT * FROM db WHERE id BETWEEN 1 AND 6";
$stmt->bindParam(':userName', $userName);
$stmt->bindParam(':hours', $hours);
try {
   $stmt = $conn->prepare($sql);
   $result = $stmt->execute($parameters);
} while($row = $result->fetch_assoc()){ ?>
   <tr>
       <td><b><?php echo $row['hours'] ?></b></td>
       <td><a href="#"></a></td>
       <td id="dayhour-1">
           <input placeholder="Name" type="text" class="form-control" id="1" value="<?php echo $row['userName'] ?>">
       </td>
   </tr>
<?php  } $stmt->close(); ?>

数据库连接:

<?php
$db_host = "localhost";
$db_name = "xxx";
$db_user = "xxx";
$db_pass = "xxx";
$db_opts = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
);
$conn    = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8mb4", $db_user, $db_pass, $db_opts);
?>

当我转到网页时,它显示众所周知的 500 错误。我不知道自己做错了什么,因为我是初学者。
请让我知道我做错了什么以及如何解决这个问题。


更新代码

<?php 
$sql = "SELECT * FROM db WHERE id BETWEEN 1 AND 6"; 

$stmt->bindParam(':userName', $userName); 
$stmt->bindParam(':hours', $hours); 

try { 
    $stmt = $conn->prepare($sql); 
    $result = $stmt->execute($stmt); 
} catch ($row = $result->fetch() { 

?> 

<tr>
    <td><b><?php echo $row['hours'] ?></b></td>
    <td><a href="#"></a></td>
    <td id="dayhour-1">
        <input type="text" value="<?php echo $row['userName'] ?>">
    </td>
</tr> 

<?php } $stmt->close(); ?>

【问题讨论】:

  • 您没有在值中包含绑定。
  • 你也在混用不同的mysql api,天知道是用哪一个连接的
  • 查看服务器的错误日志总是有助于调试。错误信息在那里。
  • 您的代码在太多级别上失败。
  • 好吧,我试过了哈哈@Fred-ii-

标签: php mysql pdo echo


【解决方案1】:

答案如下:

<?php
                            $sql = "SELECT * FROM database WHERE id BETWEEN 1 AND 5";
                            $stmt = $conn->query($sql);
                            $stmt->execute();
                            while($row = $stmt->fetch(PDO::FETCH_OBJ)){
                            ?>
                                <tr>
                                    <td><b><?php echo $row->hours ?></b></td>
                                    <td><a href="#"></a></td>
                                    <td id="dayhour-1">
                                        <input type="text" class="form-control" id="1" value="<?php echo $row->username ?>">
                                    </td>
                                </tr>
                            <?php } ?>

此代码将完成它的工作。它完全完美的 PDO 并且可以 100% 工作。一位朋友帮助了我。

【讨论】:

  • 很高兴听到您找到了解决方案!
【解决方案2】:

好的,所以我可以在这里看到一个错误:

  • try() {} while() {} 不会工作。

这是do {} while()try {} catch() {} 的语法组合。这将引发 500 内部服务器错误。

其次,根据 cmets,您需要在一个数据库连接器上进行标准化。我可能会选择PDO

http://php.net/manual/en/intro.pdo.php


编辑

这里是一个使用PDO的预处理语句示例

<?php

// Connect to your database
$pdo = new PDO("mysql:host=localhost;dbname=my_database", "username", "password")
        ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Prepare your statement
$stmt = $pdo->prepare("SELECT * FROM db WHERE id BETWEEN ? AND ?");

// Execute the statement
$results = $stmt->execute([1,6])->fetchAll(PDO::FETCH_ASSOC);

// Loop through your resuls
foreach ($results as $row) {
    ?>
        <tr>
            <td><b><?php echo $row['hours'] ?></b></td>
            <td><a href="#"></a></td>
            <td id="dayhour-1">
                <input type="text" value="<?php echo $row['userName'] ?>">
            </td>
        </tr>
    <?php
}

【讨论】:

  • 好吧,@Spholt,我尝试了以下但无法正常工作:&lt;?php $sql = "SELECT * FROM db WHERE id BETWEEN 1 AND 6"; $stmt-&gt;bindParam(':userName', $userName); $stmt-&gt;bindParam(':hours', $hours); try { $stmt = $conn-&gt;prepare($sql); $result = $stmt-&gt;execute($stmt); } catch ($row = $result-&gt;fetch(){ ?&gt; &lt;tr&gt; &lt;td&gt;&lt;b&gt;&lt;?php echo $row['hours'] ?&gt;&lt;/b&gt;&lt;/td&gt; &lt;td&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;/td&gt; &lt;td id="dayhour-1"&gt; &lt;input type="text" value="&lt;?php echo $row['userName'] ?&gt;"&gt; &lt;/td&gt; &lt;/tr&gt; &lt;?php } $stmt-&gt;close(); ?&gt; 我做错了什么
  • 请不要只说“它不起作用”....请给出您收到的确切错误消息。想象一下自己处于支持人员的位置,试图帮助那些只会说“这行不通....”的人:-)
  • @Willem-Jelle 我已经给你写了代码,但看起来你仍然有基本的语法错误。我建议使用带有 linter 的文本编辑器或 IDE 来突出显示这些问题。
  • 我没有不喜欢你的反应:o。顺便说一句,如果我输入您的代码,我不会收到页面错误(5** 错误),但信息也不会显示。感谢您的努力,非常感谢@Spholt 兄弟
  • 嗯,您是否尝试过在脚本顶部打开错误报告? ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);。它会让我们更好地了解正在发生的事情。
猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多