Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO-在我的情况下,bindValue和bindParam的比值很大_Php_Sql_Pdo_Slim - Fatal编程技术网

Php PDO-在我的情况下,bindValue和bindParam的比值很大

Php PDO-在我的情况下,bindValue和bindParam的比值很大,php,sql,pdo,slim,Php,Sql,Pdo,Slim,是的。。。这是其中之一 嗯,我目前正在研究一种我们可以称之为社交网络的东西。 我在PDO中使用Slim框架,这是我的第一份工作,也是我的第一个项目。 所以,问题是我的控制器中有一个字符串,但我想将它传递到模型,但在它传递到模型之后(我用print\r测试了它是否传递,它是否传递),bindParam似乎没有将它放在查询中 其功能如下: public static function obterTagsDasPessoas($ids) { $container = getContai

是的。。。这是其中之一

嗯,我目前正在研究一种我们可以称之为社交网络的东西。 我在PDO中使用Slim框架,这是我的第一份工作,也是我的第一个项目。 所以,问题是我的控制器中有一个字符串,但我想将它传递到模型,但在它传递到模型之后(我用print\r测试了它是否传递,它是否传递),bindParam似乎没有将它放在查询中

其功能如下:

    public static function obterTagsDasPessoas($ids)
{
    $container = getContainer();
    $query = $container->db->prepare("SELECT * FROM Pessoas_tags WHERE :ids");
    $query->bindParam(':ids', $ids, PDO::PARAM_STR);
    $query->execute();

    $result = $query->fetchAll();
    return $result;
}
我试着改为bindValue,因为我发现它更适合文本。我不知道发生了什么,因为它没有给出任何错误;它似乎没有应用bindParam,然后继续。 在
$ids
中有
id_Pessoas=1或id_Pessoas=4
,它们应该补充上面的查询。我试着将它复制到phpmyadmin和mySql,它给了我预期的结果,但它无法使用该函数


我做错什么了吗?提前感谢。

我认为您应该在$ids参数中发送一个id,例如1或4

然后将查询编辑为

$query=$container->db->prepare(“从Pessoas\u标记中选择*,其中id\u Pessoas=:id”)


我认为这应该行。

但我需要发送每一个,我永远不知道查询需要多少id。您可以在$ids参数中发送数组,然后在查询中使用where in$query=$container->db->prepare(“选择*FROM Pessoas_tags where in id_Pessoas:ids”);然后使用$query->bind_参数('ids',…$ids);您能举例说明吗?$ids参数应该只包含ID作为一维数组,如$ids=array(1,4,8);然后在bind param中,$ids被称为参数解包。。。是splat运算符。
$ids
是数组吗?还是字符串?现在它是字符串,但它是从数组生成的。我从一个表中获取了id,并生成了一个字符串,根据id的数量给我类似“id_Pessoas=1或id_Pessoas=2或id_Pessoas=3”的信息。你可以使用
WHERE IN
来代替。这是kawsar joy在回答的评论中所建议的,但出于某种原因,我无法让它工作。我从来没有使用WHERE-IN或unpacking。那么你肯定应该阅读它,否则你最终编写的代码可能很脆弱,很难维护。