テーブルから単一の値を返すように以下のコードを記述しましたが、機能していないようです。なぜですか?
$pmname = $pdo->quote($_SESSION['pmname']);
$sql = "SELECT img FROM pm_user WHERE name=$pmname";
$result = $pdo->query($sql);
foreach ($result as $row)
{
echo $row["img"];
}
なんで何もしないのfetch
?を次のように置き換えてみてくださいforeach
。
while($row = $result->fetch(PDO::FETCH_ASSOC))
{
echo $row['img'];
}
または、1行しかないことが確実な場合は、次のようにします。
$row = $pdo->query('your query')->fetch(PDO::FETCH_ASSOC);
echo $row['img'];
私はこれを試していませんが、うまくいく可能性があります-まだ。
あなたはfetch
どこかでする必要があるでしょう。構造体を使用する場合は、を使用しforeach
て結果セットを変数に格納し、fetchAll
それをループします。
$pmname = $pdo->quote($_SESSION['pmname']);
$sql = "SELECT img FROM pm_user WHERE name=$pmname";
$rows = $pdo->query($sql)->fetchAll();
foreach ($rows as $row)
{
echo $row["img"];
}
編集-そしてもっと重要なこと:
あなたは単にメソッドを介して渡すべきではありません。PHPのマニュアルPDO::quoteを参照してください$pmname
quote
この関数を使用してSQLステートメントを作成する場合は、PDO :: quote()を使用する代わりに、PDO :: prepare()を使用してバインドされたパラメーターを使用してSQLステートメントを準備することを強くお勧めします。
あなたは本当に次のようなことをしているべきです:
$sql = "SELECT img FROM pm_user WHERE name=:pmname";
$stm = $pdo->prepare( $sql );
$stm->execute( array( ':pmname' => $_SESSION['pmname'] ) );
$rows = $stm->fetchAll();
foreach ($rows as $row)
{
echo $row["img"];
}
データベースから返されるforeachと行数については、常に入力配列変数を確認する必要があります。これにより、dabataseをクエリする値が得られない場合に、本番コードで警告/エラーが発生するのを回避できます。
あなたの例では、empty()php関数でチェックできます。例えば:
$pmname = $pdo->quote($_SESSION['pmname']);
$result = $pdo->query("SELECT img FROM pm_user WHERE name=$pmname");
if($pdo->rowCount() > 0 && !empty($result))
{
foreach ($result as $row)
{
echo $row["img"];
}
}
else
{
echo 'No user image found in database.';
}