我的目标是按国家/地区的字母顺序打印国家/地区名称。这是我为此写的函数......
function getCountries(){
$namesQ = 'SELECT Name FROM `country` ORDER BY Name ASC';
global $myPdo;
$command = $myPdo -> prepare('namesQ');
$command -> execute();
return $command;
}
然后,我在HTML中回显一个数组中的名字......
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Country Names</title>
<link type="text/css" rel="stylesheet" href="primary.css" />
</head>
<body>
<div id="main" action="controller.php" method="post">
<?php
$countries = getCountries();
$countryNames = $countries->fetchAll();
foreach( $countryNames as $countryName )
{
echo 'test';
echo '<p> ' . $countryName['Name'] . '</p>';
}
?>
</div>
</body>
</html>
但似乎根本没有访问foreach
循环,因为即使......
echo 'test';
...不会打印到屏幕。
我将$countryName
中的索引更改为fhsdjk
,因为没有这样的索引,但我甚至没有收到错误消息或任何内容。我怎样才能将echo
循环中的任何内容foreach
传递给它?
答案 0 :(得分:1)
你传递的字符串需要传递变量
next
答案 1 :(得分:0)
看来,您正在准备字符串'namesQ'
,但实际上您想要准备分配给$namesQ
的sql语句。所以,替换
$command = $myPdo->prepare('namesQ');
与
$command = $myPdo->prepare($namesQ);
我建议您将fetchAll()
来电添加到getCountries()
功能中,然后致电:
$countryNames = getCountries();
而且,由于您在发现db-access错误时遇到了一些问题,我建议您始终实现异常处理。特别是当您使用PDO
作为数据访问抽象时。这是一个例子 - 与你的代码类似:
function getCountries() {
try {
$namesQ = 'SELECT Name FROM `country` ORDER BY Name ASC';
global $myPdo;
// Hier: replaced 'namesQ' with $namesQ.
$command = $myPdo->prepare($namesQ);
if (!$command) {
throw new Exception('The SQL statement can not be prepared!');
}
if (!$command->execute()) {
throw new Exception('The PDO statement can not be executed!');
}
return $command->fetchAll();
} catch (PDOException $pdoException) {
echo '<pre>' . print_r($pdoException, true) . '</pre>';
exit();
} catch (Exception $exception) {
echo '<pre>' . print_r($exception, true) . '</pre>';
exit();
}
}
关于异常处理,也许我的早期答案也会有所帮助: