0

テーブルから単一の値を返すように以下のコードを記述しましたが、機能していないようです。なぜですか?

$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"];
}
4

3 に答える 3

1

なんで何もしないの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'];

私はこれを試していませんが、うまくいく可能性があります-まだ。

于 2013-02-02T10:12:57.880 に答える
0

あなたは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を参照してください$pmnamequote

この関数を使用して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"];
}
于 2013-02-02T10:46:30.043 に答える
0

データベースから返される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.';
}
于 2013-02-02T11:00:43.630 に答える