- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有具有以下结构的 MySQL 表:
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| dept | varchar(5) | NO | MUL | | |
| sudoc | varchar(255) | NO | | | |
| title | varchar(255) | NO | | | |
| type | tinyint(1) | NO | | 0 | |
| date | date | NO | MUL | | |
| comment | mediumtext | NO | | | |
+---------+--------------+------+-----+---------+----------------+
我正在开发一个基本的搜索页面,它应该在“sudoc”和“title”字段中搜索任意短语并返回匹配的记录。
目前,我的数据库中只有一条记录的标题中包含“Lava”一词。当我通过在 MySQL 命令行中键入以下 SQL 来手动执行它时,它工作正常:
PREPARE test FROM "SELECT * FROM govdocs WHERE LCASE(sudoc) REGEXP ? OR LCASE(title) REGEXP ? ORDER BY sudoc";
SET @a = "Lava";
SET @b = "Lava";
EXECUTE test USING @a, @b;
它返回一条匹配的记录。
然后我执行这个 PHP:
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=govdocs";
$DB = new PDO($DSN, "govdocs", "password", array(PDO::ATTR_PERSISTENT => true));
$SQL = "SELECT * FROM govdocs WHERE LCASE(sudoc) REGEXP :phrase ";
$SQL .= "OR LCASE(title) REGEXP :phrase ORDER BY sudoc";
$query = $DB->prepare($SQL);
$query->execute(array(':phrase' => "Lava",));
if($query){
$results = $query->fetchall(PDO::FETCH_ASSOC);
print "There are ".count($results)." results.";
} else {
print $DB->errorInfo();
}
print "\n";
它返回 236 个结果。 “熔岩”记录不是其中之一。
我用其他短语试过,结果一点也不一致。
据我所知,当我在数据库服务器上手动执行时,SQL 工作正常。只有当它由 PHP 执行时,事情才会变得不稳定。
在这一点上,我不知道发生了什么。我错过了什么?
编辑:
这是一个新的测试用例,它尝试从没有绑定(bind)参数的 PHP 查询,正如 QTax 所建议的:
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=govdocs";
$DB = new PDO($DSN, "govdocs", "password", array(PDO::ATTR_PERSISTENT => true));
// First, do it with a static query -- no bound parameters.
$SQL = "SELECT * FROM govdocs WHERE LCASE(sudoc) REGEXP 'Lava' ";
$SQL .= "OR LCASE(title) REGEXP 'Lava' ORDER BY sudoc";
$Query = $DB->prepare($SQL);
$Query->execute();
$results = $Query->fetchall(PDO::FETCH_ASSOC);
print "There are ".count($results)." results for a query with no bound parameters.\n";
// Then do it WITH bound parameters
$SQL2 = "SELECT * FROM govdocs WHERE LCASE(sudoc) REGEXP :phrase ";
$SQL2 .= "OR LCASE(title) REGEXP :phrase ORDER BY sudoc";
$Query = $DB->prepare($SQL2);
$Query->execute(array(':phrase' => "Lava",));
$results = $Query->fetchall(PDO::FETCH_ASSOC);
print "There are ".count($results)." results for a query WITH bound parameters.";
print "\n";
我运行时的输出是:
There are 1 results for a query with no bound parameters.
There are 236 results for a query WITH bound parameters.
绑定(bind)参数有些奇怪。我刚刚用 php -v 检查了服务器的 PHP 版本,它说:
PHP 5.1.6 (cli) (built: Nov 13 2010 16:05:12)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
5.1.6 已经快五年了。我想知道这是否是某种已在较新版本中修复的古老错误?
最佳答案
试试这个:
$sql = "SELECT * FROM govdocs WHERE sudoc REGEXP ? OR title REGEXP ? ORDER BY sudoc";
$param = "Lava";
$query = $DB->prepare($sql);
$query->execute(array($param, $param));
关于php - 通过 PHP 执行的 REGEXP 的奇怪 MySQL 结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6280947/
我对这里的区别是什么以及为什么一个有效而另一个无效感到困惑。谁能解释一下? //The string to search through var str = "This is a string /*
我很困惑这里有什么区别以及为什么一个有效而另一个无效。有人能解释一下吗? //The string to search through var str = "This is a string /* w
概述 RegExp 的构造函数创建了一个正则表达式对象,用模式来匹配文本。 有关正则表达式介绍,请阅读JavaScript指南中的正则表达式章节。 语法 文字和构造符号是可能的: /patt
在我的数据库中,我有一个公司表。该表有一个名为 tags 的字段,其中包含以下内容: Furniture Retail E-commerce B2C Home & Furniture Consumer
var str='The_Andy_Griffith_Show'; // string to perform replace on var regExp1=/\s|[A-Z]/g; var reg
我正在为 VBA 编写一个脚本,用于 Outlook 2013,它使用正则表达式,我发现的每个示例似乎都使用 Set regex = New RegExp创建一个 RegExp 对象。当我尝试这个时,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
在“How do I removing URLs from text?”中建议使用以下代码: require 'uri' #... schemes_regex = /^(?:#{ URI.scheme
所以我有一个 RegExp regex =/asd/ 我将它作为 key 存储在我的键值对存储系统中。 所以我说 str = String(regex) 返回 "/asd/"。 现在我需要将该字符串转
谁能提供一些例子来解释 regexp.Compile 之间的区别?和 regexp.CompilePOSIX ?我阅读了文档。但是我无法得到直观的理解。 最佳答案 Perl 和 POSIX 兼容的正则
我目前正在学习 SQL 并使用 SSMS 2017。我不明白为什么在使用 REGEXP 语法时出现错误,它似乎适用于其他任何人: SELECT * FROM List WHERE Name REGEX
我有一个包含文本的 emacs 缓冲区 a1b2c3 使用正则表达式构建器,我创建了正则表达式 "b\\(2\\)" 并且可以看到匹配突出显示(b2,2 的颜色不同)。 但是,当我将表达式粘贴到 re
这个问题已经有答案了: JavaScript: using constructor without operator 'new' (2 个回答) 已关闭 7 年前。 RegExp('hi') 和有什么
我的正则表达式是这样的: ((?:[a-z][a-z0-9_]*)).*?(\d+).*?((?:[a-z][a-z0-9_]*)).*?(\d+).*?([a-z]) 如果我将其作为 MySQL R
我对基准测试和功能感兴趣?是否有理由使用 Jakarta 正则表达式? 最佳答案 似乎没有什么理由。但是除了 Jakarta 图书馆之外,还有其他一些有趣的图书馆。此链接提供了一些有关性能和 perl
如果声明了 SPEC Env,我将尝试有条件地加载我的测试: var context = null if (process.env.SPEC) { context = require.contex
我尝试为 emacs 编写一些新的对齐规则,但发现这种奇怪且不一致的行为。当前缓冲区内容: "some thing" like => this hello => world and => aga
这个问题在这里已经有了答案: Is gcc 4.8 or earlier buggy about regular expressions? (3 个答案) 关闭 8 年前。 我尝试使用 C++11
我遇到了两个错误,都与编码有关并且都相关。 我在启动 WEBrick 时遇到的第一个错误(技术上是警告): /Users/USERNAME/example/config/initializers/bb
我有一个 almost-json文件。估计1000 行。这是其中的一部分: level: { 1: { cost: 200,
我是一名优秀的程序员,十分优秀!