gpt4 book ai didi

php - PDO 数据库不返回行,只返回查询字符串(pdo 对象)

转载 作者:可可西里 更新时间:2023-11-01 08:34:05 24 4
gpt4 key购买 nike

我要开门见山了:

Mysql 数据库 tbl = mycars_gallery

|id|  car_id|img_thumb |img_link  |
-----------------------------------
|5 | 3 |thumb1.jpg|image1.jpg|
|6 | 3 |thumb2.jpg|image2.jpg|
|7 | 3 |thumb3.jpg|image3.jpg|

我有 2 个类:

上传.class.php

class Upload
{
function __construct()
{
// nothing
}

function deleteCarImgs($car_id,$arr_imgids)
{
//weld all img ids and separate by commas
$img_ids = implode(",",$arr_imgids);

$sql = "SELECT img_link, img_thumb ";
.= "FROM mycars_gallery WHERE car_id = :carid AND id IN(:imgids);";

$params = array(
":carid" => $car_id,
":imgids" => $img_ids
);

//DB processing happens in Database class(100% working)
$dbconn = new Database;
$rows = $dbconn->dbProcess($sql, $params); //doesnt run
}
}

Cars.class.php

class Cars
{
function __construct()
{
// nothing
}

function deleteCompleteCar(3)//car_id is 3
{
$upload = new Upload();

$arr_imgids = array(5,6,7);//these are img_id = 5,6,7 the ones I want to select
$res = $upload->deleteCarImgs($id,$arr_imgids);

var_dump($res);
}
}

var_dump 消息:

PDOStatement Object (     [queryString] => SELECT img_link, img_thumb FROM mycars_gallery WHERE car_id = :carid AND id IN(:imgids); )   

我需要什么:所有其他功能都正常工作,但对于这个特定的类,它似乎被破坏了。绝对不会发生任何错误。当我使用 vardump 时,只显示查询而不是获取图像链接和拇指。我觉得这与 2 个类相互交互有关。

我已经做过的事情:

  1. 我已经直接运行了很多次sql查询,它有效
  2. 我通过其他类运行数据库 PDO 函数,它有效
  3. 我也尝试摆脱 implode() 并将单个数字字符串 '7' 传递给 :imgsid token ,仍然没有运气,它实际上返回了 NULL,而不是 PDO obj

非常感谢。

最佳答案

以下是您可能会觉得有用的一些发现。首先来自 PDO::prepare 上的 PHP 手册.但是您正在使用 implode() 传递单个字符串,但我认为这仍然是需要牢记的重要事项。

You cannot bind multiple values to a single named parameter in, for example, the IN() clause of an SQL statement.

第二个和第三个可能是由于打字错误:

$sql = "SELECT img_link, img_thumb "; // this semi colon will cause syntax error on the next line.
.= "FROM mycars_gallery WHERE car_id = :carid AND id IN(:imgids);";

并且,在您的表结构中,您已将 mycar_id 显示为一列,但您的 where 子句中包含 car_id

最后,我不想复制粘贴的可能解决方案,所以这里是您可以实现的解决 in 问题的方法:

PHP PDO: Array in Update SQL WHERE IN () clause

Can I bind an array to an IN() condition?

更新:

像这样的东西应该可以工作,但请记住 $arr_imgids 需要是一个数组才能工作:

function deleteCarImgs($car_id, $arr_imgids)
{
$in_sql = ':imgid' . implode(',:imgid', $arr_imgids);

$sql = "SELECT img_link, img_thumb
FROM mycars_gallery WHERE car_id = :carid AND id IN({$in_sql});";

$params = array_merge(
array(":carid" => $car_id),
array_combine(explode(',', $in_sql), $arr_imgids)
);

//DB processing happens in Database class(100% working)
$dbconn = new Database;
$rows = $dbconn->dbProcess($sql, $params); //doesnt run
}

关于php - PDO 数据库不返回行,只返回查询字符串(pdo 对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com