我是 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>';
}
}
嗯,给你的建议是错误的。
不是使用而是学习。
在使用它之前,您必须学习一些东西。
周围有很多关于 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部分你已经得到答案了
尝试使用 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;
}
如果您还有疑问,请告诉我
您使用连接变量
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>';
}