使用 PDO 从数据库获取数据

问题描述 投票:0回答:3

我是 PDO 新手,我正在按照本网站高级用户的建议使用它。 我正在尝试使用 pdo 从表中获取数据,使用 while,这样我就可以“组织”所有数据。

我的查询正在运行,但由于某种原因我什至无法转储它。

这是我的代码:

$sql = $conn->query("SELECT id, nivel, tipo, titulo, texto, ativa FROM account.quests_faq WHERE ativa='YES' ORDER BY nivel DESC");
        while($row = $conn->fetch(PDO::FETCH_ASSOC)){
            if ($tipo=='main'){
                echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="green">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
            }else{
                echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="red">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
            }
        }

所以,在简历中。 我有一个包含标题、一些文本和一个 ID 的表。 我想从中获取这些数据并回显它。

希望你能帮助我,抱歉新手的疑问。

编辑1:

$username = 'sssss';
        $password = 'sssss';
        $conn = new PDO('mysql:host=xxxxxxxx;dbname=account', $username, $password);
            $sql = "SELECT id, nivel, tipo, titulo, texto, ativa FROM account.quests_faq WHERE ativa='YES' ORDER BY nivel DESC";
            $stmt = $conn->query($sql);
            while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                 echo '<li><a href="index.php?s=quest_info&id='.$row['id'].'"><font color="green">Nivel '.$row['nivel'].' - '.$row['titulo'].'</font></a></li><br>';
            }else{
                echo '<li><a href="index.php?s=quest_info&id='.$row['id'].'"><font color="red">Nivel '.$row['nivel'].' - '.$row['titulo'].'</font></a></li><br>';
            }
        }
php mysql pdo
3个回答
2
投票

嗯,给你的建议是错误的。

不是使用而是学习
在使用它之前,您必须学习一些东西。
周围有很多关于 PDO 的教程(虽然都是蹩脚的教程),但至少你可以从中学习正确的语法

    $sql = "SELECT id, nivel, tipo, titulo, texto, ativa FROM account.quests_faq WHERE ativa='YES' ORDER BY nivel DESC";
    // look this string contains SQL query. so, the variable is named $sql
    $stmt = $conn->query($sql);
    // in the next line we are getting a statement object from the function query()
    // this is why variable called $stmt
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    // and now we can start iterating this statement.
    // statement, Carl. Not connection to database
    // which is called $conn, if you get an idea

您还必须启用 PDO 错误报告。

是的,正如另一个答案中所说,你的 PHP 语法也是错误的。你也应该学习它,而不是把随机的代码行拼凑在一起,然后要求其他人为你修复它。

从不太复杂的语法开始,从不加修饰地回显一个变量开始。每个帖子问一个问题。至于PDO部分你已经得到答案了


0
投票

尝试使用 foreach 循环。循环完成后,您实际上可以在整个文件的任何位置使用

$arrRows
数组!一位高级网络开发人员告诉我,这是一种更好的方法。

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach($rows as $key => $arrRows){
         echo $arrRows['COLUMN_NAME_HERE'];
    }

这是一个演示函数,它将使用 PDO 从表中选择值:

function showPost($uID){
        global $numRecords, $dbConnection, $stmt;
        connect(); //Run connect function (../connections/connections.php)

        $sqlStr = "SELECT user_post.*, user.name, user.avatar FROM user_post JOIN user ON user_post.uID = user.uID WHERE user_post.uID = ".$uID. " ORDER BY post_time DESC";

        // Run query
        try
        {
            $stmt = $dbConnection->query($sqlStr);
            if($stmt === false)
            {
                die("Error executing the query: $sqlStr");
            }
        }
        catch(PDOException $error)
        {
            // Display error message if applicable
            echo "An error occurred: ".$error->getMessage();
        }
        $numRecords = $stmt->rowcount();

        
        // Close the databaase connection
        $dbConnection = NULL;
    }

如果您还有疑问,请告诉我


-1
投票

您使用连接变量

conn
而不是查询变量
sql
来获取查询结果。

$sql = $conn->query("SELECT id, nivel, tipo, titulo, texto, ativa FROM account.quests_faq WHERE ativa='YES' ORDER BY nivel DESC");
while($row = $sql->fetch(PDO::FETCH_ASSOC)){
if ($tipo=='main')
    echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="green">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
else
    echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="red">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
}

或者您可以使用 Prepared statements

进行类似的操作
$sql = $conn->prepare("SELECT id, nivel, tipo, titulo, texto, ativa FROM account.quests_faq WHERE ativa='YES' ORDER BY nivel DESC");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)){
    if ($tipo=='main')
        echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="green">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
    else
        echo '<li><a href="index.php?s=quest_info&id='$row['id']'"><font color="red">Nivel '$row['nivel']' - '$row['titulo']'</font></a></li><br>';
}
© www.soinside.com 2019 - 2024. All rights reserved.