在这里感到困惑:我正在看一堆用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 - 都得到了相同的非结果)
我在这里缺少什么?
答案 0 :(得分:2)
您可以尝试更改此
AND p.products_id='".(int)$pid." '"
到
AND p.products_id='".(int)$pid."'"
在双引号后和单引号之前的空格,您不需要。
此外,您在此处不需要(int)
,因为您已在上一行中执行此操作。
让我知道它是否有效。
答案 1 :(得分:0)
这里有两点需要改进:
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'");