【问题标题】:LIKE operator and correct usage with NOT IN [duplicate]LIKE 运算符和 NOT IN 的正确用法 [重复]
【发布时间】:2012-06-30 00:38:54
【问题描述】:

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

目前有效...

$resultInput = mysql_query("SHOW COLUMNS FROM " . $table. " WHERE Field NOT IN ('id', 'created', 'date_modified', 'content', 'type', 'bodytext', 'project_content', 'content_short') AND Field NOT LIKE '%_image%'");

但是我想删除所有名称为 content 的字段并将其添加到 LIKE 函数中,例如%content%

$resultInput = mysql_query("SHOW COLUMNS FROM " . $table. " WHERE Field NOT IN ('id', 'created', 'date_modified', 'type', 'bodytext') AND Field NOT LIKE ('%_image%', %content%)");

但这似乎不起作用?并返回一个“

警告:mysql_num_rows() 期望参数 1 是资源,布尔值在
C:\xampp\htdocs\framework.php 第 33 行

【问题讨论】:

  • %content% 周围缺少单引号 ??并且您有两个项目,我认为您需要放置两次,而不是两次,每次一次

标签: php mysql field sql-like


【解决方案1】:

您正在尝试的实际上是语法错误。 LIKE 条件必须单独列出并用ANDOR 分隔。但是,在您的情况下,您可以通过| 分隔条件来做到这一点with REGEXP

SHOW COLUMNS 
FROM " . $table. " 
WHERE Field NOT IN ('id', 'created', 'date_modified', 'type', 'bodytext') 
AND Field NOT REGEXP '_image|content'

因为正则表达式将匹配content_image 内的模式Field anywhere,所以不需要与% 中使用的% 通配符的任何其他等效字符。 @。

我们假设$table 已与一个有效表名列表进行比较,以用于此查询以确保安全。

最后,您收到了致命错误mysql_num_rows() 期望参数 1 是资源,因为您没有对查询结果进行错误检查。

$result_input = mysql_query("SHOW COLUMNS.....");
if (!$result_input) {
  // Something's wrong
  echo mysql_error();
}
else {
  // ok, everything is working, proceed.
}

【讨论】:

  • 非常好的解决方案!谢啦!当他们想要包含内容时会怎么做? AND 字段正则表达式“内容”?
  • 例如这个查询似乎不起作用.... $resultTextarea = mysql_query("SHOW COLUMNS FROM " . $table." WHERE Field IN ('bodytext') AND Field REGEXP 'content' ");
  • @AlexFagard 如果你想要积极的结果而不是消极的结果,你需要一个OR,就像Field IN ('bodytext','somethingelse') OR Field REGEXP '_image|content'一样。
  • @AlexFagard 不要仅将REGEXP 用于content 这样的简单条件,因为使用LIKE 可能更有效。
  • 谢谢。是的,在我的研究中,我看到了类似语句的效率更高的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2017-08-10
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多