【问题标题】:mySQL PDO not able to SELECT from TABLEmySQL PDO 无法从 TABLE 中选择
【发布时间】:2013-06-06 04:44:49
【问题描述】:

我正在尝试学习 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 中选择 *

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

我正在学习教程.. 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 />';
    }

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

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

【问题讨论】:

  • 你没有获取数组...
  • @Mr.Alien 代码是正确的。请参阅此处的第一个示例php.net/manual/en/pdo.query.php
  • print_r($dbh->query($sql)) 结果是什么?
  • print_r($dbh->query($sql));什么都不返回...
  • 有人可以给我一些代码,以便我能更好地理解结构吗?我已经阅读了许多教程和 PHP.NET 资源。我只是无法让它工作......尽管多次尝试,错误接踵而至。

标签: php mysql pdo foreach


【解决方案1】:

您还没有获取要在循环中使用的数组。

变化:

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

收件人:

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

效果很好。

【讨论】:

  • 我很感激,但我仍然收到一个错误:警告:第 11 行中为 foreach() 提供的参数无效。我的服务器 PHP 设置可能有问题吗?我已经尝试了一个多月来让 PDO 正常工作。我只是一个接一个地出错。
  • 希望你的表有记录。
  • 对不起,你是什么意思?表中有记录..当我在命令行中手动输入 SELECT 时,它可以工作
  • 好的。然后确保您已正确连接到数据库。再次 print_r($dbh);
  • 还要确保您的数据库参数(如主机、数据库等)正确提供。
【解决方案2】:

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

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

【讨论】:

  • 这给了我这个错误:致命错误:在非对象中调用成员函数 fetch()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2017-11-03
  • 1970-01-01
  • 2017-04-11
  • 2014-03-22
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多