PDO将变量绑定到准备好的mysql语句并使用while循环获取

时间:2016-12-20 01:49:18

标签: pdo while-loop bindparam

我已经使用了几个指南,但我无法运行以下内容。如果我在Select语句中对2个变量进行硬编码,则运行正常。我需要使用变量,并且我无法使绑定语句起作用。对于旧的Mysql_有很多经验,但PDO在这一点上仍然是一个挑战。

$db_table = "ad";
$ID       = "1";

$dsn = "mysql:host=$hostname;dbname=$database;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

$pdo  = new PDO($dsn, $username, $password, $opt);

$result = $pdo->prepare("SELECT * FROM :ad WHERE id= :id ");    //  Line 359 
$result->bindParam(':ad', $db_table, PDO::PARAM_STR);
$result->bindParam(':id', $ID, PDO::PARAM_STR);
$result->execute();

while($row = $result->fetch(PDO::FETCH_ASSOC))
    {
    $product    = $row["product"];
    $msrp       = $row["msrp"];
    $sale       = $row["sale"];
    $content    = $row["content"];
    echo "<strong>$product</strong>&nbsp;-&nbsp;$content<br />";
    // echo $msrp . "<br />";
    if($msrp != "0.00") { echo "MSRP $$msrp";  }
    if($sale != "0.00") { echo "<img src='/images/c.gif' width='75' height='6' border='0'><span style='color: red;'>Sale $$sale</span>"; }
    }

$pdo = null;

以上生成此错误,

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近&#39;? WHERE id =?&#39;在第1行&#39;在   /XXXXXXXXXXXX/index_desktop_pdo.php:359

1 个答案:

答案 0 :(得分:0)

您的数据库结构错误。应该有始终只有一个表来保存所有类似的数据。因此无需创建变量表名称。

要区分数据的不同部分,只需在此表中添加另一个字段即可。这就是数据库的工作方式。

所以你的代码应该是

$section = "ad";
$ID      = "1";

$result = $pdo->prepare("SELECT * FROM whatever WHERE section=:ad AND id= :id");
$result->bindParam(':ad', $section);
$result->bindParam(':id', $ID);
$result->execute();