【问题标题】:How can I use PHP arrays in queries?如何在查询中使用 PHP 数组?
【发布时间】:2017-12-29 18:26:47
【问题描述】:

大家好,我有这个问题:

$URLA=implode("','",$Array);
$Data=$connection->prepare("SELECT Category,ID FROM SITES WHERE URL IN('".$Array."') AND Email=:Email ORDER BY Category DESC");
$Data->bindValue(':URL', $URL);
$Data->bindValue(':Email', $Email);
$Data->execute();

这段代码给出了这个错误: 未捕获的 PDOException:SQLSTATE[HY093]:无效的参数号:绑定变量的数量与标记的数量不匹配。 我怎么解决这个问题? 请注意,Array 是一个来自 while 循环的变量。并且包含多个变量。 我试着像这样绑定这个数组:

$Data->bindValue(':Array', $Array);

但这没有用:'(

【问题讨论】:

  • URL IN('".$Array."') 应该是$URLA
  • 您也没有在查询中使用:URL。我希望您不打算将其用于WHERE URL
  • @Funk Forty Niner nono,因为 implode 会像:1','2' 这样的数组,所以 ' ' 将是 '1','2'
  • $Array 里面是什么???
  • @Abdulla Nilam 1 和 2

标签: php arrays pdo


【解决方案1】:

当您mentioned 时,您的数组看起来像这样array(1,2,'ABC');

试试这个

$URLA= implode("', '", $array); # wrapping with single quote 

$Data=$connection->prepare("SELECT Category,ID FROM SITES WHERE URL IN(".$URLA.") AND Email=:Email ORDER BY Category DESC");
// $Data->bindValue(':URL', $URL); Seems no longer needed.
$Data->bindValue(':Email', $Email);

或者

$URLA= implode("', '", $array); # wrapping with single quote 

$Data=$connection->prepare("SELECT Category,ID FROM SITES WHERE URL IN(:url) AND Email=:Email ORDER BY Category DESC");
$Data->bindValue(':URL', $URLA);
$Data->bindValue(':Email', $Email);

【讨论】:

  • 我可以绑定数组以避免 SQL 注入吗?
  • 您可以将此$Data->bindValue(':URL', $URL);IN(:url) 一起使用
  • @user9154057 检查edit now 并检查此answer too
猜你喜欢
  • 2017-12-11
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2022-11-18
相关资源
最近更新 更多