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();
}

?>

出力は次のとおりです。

データベースに接続しました

SELECT * FROM rofWeapons

警告: 11 行目の /home/path/to/script/script.php の foreach() に無効な引数が指定されました

私はチュートリアルに従っています.. foreachはよさそうです。なぜそれは無効な引数ですか?

"SELECT * FROM rofWeapons" を mySQL クエリに入力すると、テーブルは問題なく表示されます。

少し助けてください?

別の試み

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 に答える