PDO没有获取行结果

时间:2012-11-09 21:26:19

标签: php mysql pdo

我使用了旧的mysql脚本并尝试将其转换为更安全的PDO格式。在我的旧脚本中,我运行了 SELECT字段FROM表语句,然后将其放入变量中 $ 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-Statement,您似乎无法像以前那样运行与easiliy相同的语句。我尝试将变量分配给我的查询正在选择的行产品,但我得到错误:

  

不能使用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的变量,如果产品=“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"; 
}

?>

本手册对于将旧陈述转换为新陈述并不安全,所以我对此表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:3)

使用

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

获得1行和

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

获取所有行

你期待一行所以使用第一行。