-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"; 
}

?>

如何将我选择的表中的“产品”字段传递给带有 PDO 的变量,并且如果产品 =“索尼”回显“消息”; ?

我也尝试用这个替换语句,但没有成功。

<?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);

获取所有行

你期待一排,所以使用第一排。

于 2012-11-09T21:32:52.617 回答