无法在查询中使用变量

时间:2011-08-08 10:23:13

标签: php mysql variables

在这里感到困惑:我正在看一堆用PHP4编写但在PHP5下运行的代码 - 代码(删节)看起来像:

$pid=(int)$customer_exists['pid'];//this value comes from an earlier query & does exist

$query2 = mysql_query("SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='".(int)$pid." '"   );

这不会从数据库中获得结果。 如果第一行改为$ pid = 28;或者如果查询被更改为只搜索一个表,那么我们得到一个结果。

在查询之前和之后回显$ pid将回显第1行中指定的值

(尝试了许多版本的实际$ query2 - 都得到了相同的非结果)

我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

您可以尝试更改此

AND p.products_id='".(int)$pid." '" 

AND p.products_id='".(int)$pid."'" 

在双引号后和单引号之前的空格,您不需要。 此外,您在此处不需要(int),因为您已在上一行中执行此操作。

让我知道它是否有效。

答案 1 :(得分:0)

这里有两点需要改进:

  1. mysql_ *函数已弃用PHP 5.3并将很快删除,因此请勿使用它们。请改用mysqli_ *或PDO。
  2. 这是一个完美的SQL注入代码(这很糟糕)。更好地使用准备好的陈述。
  3. PDO示例:

    $pid=(int)$customer_exists['pid'];
    $conn = new PDO($dsn, $user, $pass);
    $stmt = $conn->prepare("`SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='?'");
    $result = $stmt->query(array($pid)); //note an array here
    //Iterating
    foreach ($result->fetchAll() as $row){
        //do what you need here
    }
    

    有关PDO构造函数参数的说明,请参阅http://www.php.net/manual/en/pdo.construct.php

答案 2 :(得分:0)

正如 Wbdvlpr 所述,还有一个额外的空间:

此外,如果语句附加了double qoutes,则不需要再连接字符串:

$query2 = mysql_query("SELECT * FROM `products` AS p, `products_description` AS pd WHERE pd.products_id=p.products_id AND p.products_id='$pid'");