-2

古い mysql スクリプトを使用して、より安全な PDO 形式に変換しようとしました。私の古いスクリプトでは、SELECT field FROM tableステートメントを実行し、それを変数 $Product = $row['product']; に入れました。IF ステートメントと ELSE ステートメントを実行します。ユーザーの製品=ソニーの場合、「これらにも興味があるかもしれません」とエコーしたかったのですが、以下に私のコード例を示します

<?php
$connect = mysql_connect("host","username","password");
mysql_select_db("dbname");

$username = $_SESSION['username'];

$q = "SELECT product FROM users WHERE username = ('$username')";

$r       = mysql_query($q);
$row     = mysql_fetch_assoc($r);
$Product = $row['product'];

if($Product == "sony")
{
  echo "You may be interested in these as well"; 
}
?>

PDOステートメントを使用すると、以前と同じ種類のステートメントを簡単に実行できないようです。クエリが選択している行の製品に変数を割り当てようとしましたが、エラーが発生しました:

タイプ PDOStatement のオブジェクトを配列として使用できません

これが私のコードです

<?php
session_start();

$db = new PDO('mysql:host=host;dbname=dbname;charset=UTF-8', 'username', 'password');

$username = $_SESSION['username'];
$getProduct = $db->query("SELECT product FROM users  WHERE username = '$username'");
$getProduct->execute();

$Product = $getProduct['product'];

if($Product == "sony")
{
  echo "You may be interested in these as well"; 
}

?>

選択しているテーブルのフィールド「product」を PDO の変数に渡すにはどうすればよいですか? product ="sony" echo "message"; ?

また、ステートメントをこれに置き換えてみましたが、成功しませんでした。

<?php
$query = $db->query("SELECT product FROM users  WHERE username = '$username'");
$query->execute();

$Product = $query ->fetchAll(PDO::FETCH_ASSOC);

$Product = $getProduct['product'];

if($Product == "sony")
{
    echo "You may be interested in these as well"; 
}

?>

このマニュアルは、古いステートメントを新しい安全なステートメントに変換することに関してはあまり親切ではありません。

4

1 に答える 1

3

使用する

$query->fetch(PDO::FETCH_ASSOC);

1行を取得し、

$query->fetchAll(PDO::FETCH_ASSOC);

すべての行を取得するには

1行が必要なので、最初の行を使用してください。

于 2012-11-09T21:32:52.617 に答える