0

我正在尝试学习 mySQL PDO .. 在教程之后阅读教程并尝试应用不同的方法来执行简单的 SELECT 语句。

这是我最近的尝试:

<?
include("inc/connPDO.php"); // hostname, username and password and dbName are in here
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbName", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database';   // this outputs appropriately

/*** The SQL SELECT statement ***/
$sql = "SELECT * FROM rofWeapons";
echo '<p>'.$sql;
foreach ($dbh->query($sql) as $row){   // *** line 11 error 
    print $row['weaponName'] .' - '. $row['weaponType'] . '<br />';
}


/*** close the database connection ***/
$dbh = null;    
}
    catch(PDOException $e)
{
    echo $e->getMessage();
}

?>

输出如下:

连接到数据库

选择 * 从 rofWeapons

警告:在第 11 行的 /home/path/to/script/script.php 中为 foreach() 提供的参数无效

我正在学习教程.. foreach 看起来不错。为什么它是一个无效的论点?

当我在 mySQL 中输入“SELECT * FROM rofWeapons”时,查询表非常好。

请帮忙?

另一个尝试

如果我尝试 PREPARE 语句:

/*** The SQL SELECT statement ***/
$weaponType=1;
    $sql = "SELECT * FROM rofWeapons WHERE weaponType=:weaponType";

$stmt = $dbh->prepare($sql);   // *** error Line 12 ***
$stmt->bindValue(':weaponType', $weaponType, PDO::PARAM_INT);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC); 

while($row = $stmt->fetch()) {
        print $row['weaponName'] .' - '. $row['weaponType'] . '<br />';
    }

我没有错误。什么都没有。

这非常令人沮丧。我究竟做错了什么?

4

2 回答 2

4

您尚未获取要在循环中使用的数组。

改变:

foreach ($dbh->query($sql) as $row){
    //YOUR CODE STUFF
}

至:

foreach ($dbh->query($sql)->fetchAll as $row){
    //YOUR CODE STUFF
}

它工作正常。

于 2013-06-06T05:19:21.040 回答
0

我不确定这是否能解决您的问题,但您可能想试试这个:

$sql = "SELECT * FROM rofWeapons";
$sth = $dbh->query($sql);
while($row = $sth->fetch(PDO::FETCH_ASSOC))
{
     print $row['weaponName'] .' - '. $row['weaponType'] . '<br />';
}
于 2013-06-06T05:33:46.067 回答