【问题标题】:PDO bindvalue in 'where in' clause doesn't work'where in' 子句中的 PDO 绑定值不起作用
【发布时间】:2013-06-08 17:10:17
【问题描述】:

我正在尝试使用“where in”子句获取顶级信息,但如果我使用 bindvalue 或 bindparam,我不会得到任何结果。

这是我没有给出任何结果的查询

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)");
$user2->bindValue(':ip','127.0.0.1',PDO::PARAM_STR);
$user2->execute();

如果我使用不带任何绑定值或参数的直接搜索,我会得到结果

$user2 = $db->prepare("Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = '127.0.0.1')");
$user2->execute();

谁能帮我在这个搜索“where in”子句中使用绑定值或参数?

@PhilCross 这是我在使用 var_dump 时得到的:

object(PDOStatement)#4 (1) { ["queryString"]=> string(142) "Select top 100 memb_guid,memb___id,mail_addr,Gender,Country from MEMB_INFO where memb___id in (Select memb___id from MEMB_STAT where IP = :ip)"

Ps:我使用的是 MSSQL Server

【问题讨论】:

  • 需要PDO::PARAM_STR 吗?
  • 启用 MySQL 查询日志并查看正在运行的内容
  • 在 SQL 查询中加单引号? where IP = ':ip')
  • PDO 准备好的语句不需要在值周围加上引号。 @MandoMadalin 您可以在第一个查询的第一行之后直接在 $user2 上执行 var_dump() 吗?可能有一个 PDO 错误,由于您的错误处理,它没有被抛出。此外,将 PDO 的错误处理设置为抛出异常并将 $db->prepare 代码包装在 try / catch 块周围。
  • @David,准备好的语句不应该在参数周围加上引号。

标签: php sql pdo where bindvalue


【解决方案1】:

绑定值的key应该不带':'

并且绑定值应该在变量中。

$ip = '127.0.0.1';

$user2->bindValue('ip',$ip,PDO::PARAM_STR);

【讨论】:

  • 不正确;事实上,参数键上的 : 前缀在旧版本的 PDO 中是​​强制性的,现在在最新版本的 PDO 中是​​可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2017-11-18
  • 2010-12-07
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多