【问题标题】:How to do a SELECT LIKE with PDO Prepare Statement - are value objects of any use here?如何使用 PDO Prepare 语句执行 SELECT LIKE - 值对象在这里有用吗?
【发布时间】:2011-04-04 08:00:33
【问题描述】:

关键是要进行一个查询,该查询将获取用户在输入框中输入的值,并检索通过关键字比较找到的数据库记录。

在 innodb 引擎上,所以没有 MATCH AGAINST 可用吗? 我将在索引列表上使用 LIKE,希望没问题。

传统上我们会这样做:

SELECT our_column FROM our_db_table WHERE our_column LIKE '%$queryString%';

因此,如果我们的查询字符串是 AB,我们将同时检索:“lab”和“abnormal”是否精确?

1) 我们如何通过使用 PDO 来实现这一点?


思考:

类似的,

$stmt = $this->_dbh->prepare("SELECT d.our_column FROM our_db_table d WHERE d.our_column LIKE ?");

但是接下来呢?

通常我会这样做:

$stmt->bindParam(1, $ourTableVo->getOurColumn(), PDO::PARAM_STR, 255);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_OBJ);

2) VO 对这个案子有用吗?

提前非常感谢!

【问题讨论】:

  • 正确,InnodDB 不支持Full Text Indexing...
  • 您要“存档”还是“实现”?
  • 我更愿意实现,如果可以的话,以后再存档。 :)

标签: php select pdo sql-like value-objects


【解决方案1】:
$stmt->bindValue(1, '%' . $ourTableVo->getOurColumn() . '%', PDO::PARAM_STRING);

这不行吗?

【讨论】:

  • 我不知道。这似乎是合乎逻辑的......但我注意到你使用的是 bindValue 而不是 bindParam ......有什么特别的原因吗? :) 提前非常感谢
  • 只有变量可以使用bindParam绑定(我其实想知道为什么你的函数返回值可能被绑定。或者它是通过引用返回的?)如果你想绑定一个值,而不是你的变量必须使用bindValue
  • 好的。到目前为止,我一直使用 bindParam 来绑定我的 getter 的返回值。随着成功。我可能误会了什么?我不知道它是否通过引用返回。 :( 我是新手。:s 我怎么能看到?我很乐意回答!
  • @nikic 请留在我这里... :) 如果我这样做 $stmt->bindParam(1, '%' . $dominioVo->getNome() . '%', PDO: :PARAM_STR, 255);我得到:“致命错误:无法通过引用传递参数 2”这个错误是什么意思?是的,这与您已经告诉过的内容有关,但我没有连接点,请耐心等待... :)
  • 在此示例中:'%' . $ourTableVo->getOurColumn() . '%' 是表达式的结果,因此是值。如果你写了$var = '%' . $ourTableVo->getOurColumn() . '%',那么它将是一个变量,并且可以使用bindParam绑定:$stmt->bindParam(1, $var = '%' . $ourTableVo->getOurColumn() . '%', PDO::PARAM_STRING);所以,一般规则:如果你只想使用preared语句一次,你应该总是使用bindValue,所以没有任何问题;)
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2020-04-14
  • 1970-01-01
  • 2012-11-29
相关资源
最近更新 更多