GET_RESULTS()查询仅在输入字符串时不起作用

时间:2015-11-25 作者:user83847

我试图向数据库发送查询,如果查询的是数字而不是字符串,那么在数据库中可以正常工作。例如,如果我尝试:

$all_pages = $wpdb->get_results(\'SELECT post_title, guid FROM wp_11_posts WHERE ID = 30\', OBJECT); I get a result, no problem
然而,当我尝试字符串时,例如

$all_pages = $wpdb->get_results(\'SELECT post_title, guid FROM wp_11_posts WHERE post_title = Office Home\', OBJECT);
它没有返回任何内容,不知道是否有人能找到原因?列名正确,数据库中确实存在该值。

2 个回复
SO网友:s_ha_dum

SQL中的某些数据类型不需要使用引号,整数就是其中之一。这就是为什么第一块代码可以工作的原因。这是一条完全有效的SQL语句。

您确实需要在SQL中引用字符串。这就是为什么您的第二块代码无法工作的原因。正确的形式是:

$all_pages = $wpdb->get_results(
  \'SELECT post_title, guid FROM wp_11_posts WHERE post_title = "Office Home"\',   
  OBJECT
);
如果您的数据以任何方式受到用户输入的影响,您应该使用prepare().

$string = "Office Home"; // if coming from $_POST or $_GET data or other user manipulatable sources
$sql = \'SELECT post_title, guid FROM wp_11_posts WHERE post_title = %s\';
$sql = $wpdb->prepare($sql,$string);
$all_pages = $wpdb->get_results($sql,OBJECT);
prepare() 将根据占位符--%s.

SO网友:AddWeb Solution Pvt Ltd

回答:it doesn\'t return anything, wonder if anyone can spot the reason why?

MySQL很像PHP,它将尽可能自动转换数据类型。由于您使用的是int字段(左侧),因此它会尝试将参数的右侧透明地转换为int,因此“9”将变为9。

严格地说,引号是不必要的,并且迫使MySQL进行类型转换/转换,因此它浪费了一点CPU时间。实际上,除非您运行的是Google大小的操作,否则这种转换开销在显微镜下会很小。

我会根据需要更改您的查询代码。请检查一下。

$strTitle = "Office Home";
$all_pages = $wpdb->get_results(\'SELECT post_title, guid FROM wp_posts WHERE post_title = "\'. $strTitle .\'"\', OBJECT);
如果对此有任何疑问,请告知我。

相关推荐

如何将WordPress配置为与Microsoft SQL Server数据库对话?

我们正在我们的intranet站点上构建WordPress站点,并希望将其连接到Microsoft SQL Server。我已经在IIS上下载并配置了PHP和PHP管理器。我还从键入此线程标题时弹出的已回答问题列表中下载了SQL Server DLL。我按照指示在PHP文件夹中下载了这些DLL。当我启动服务器地址以安装WordPress时,系统会提示我提供SQL DB名称、用户名、密码和DB主机名。我还下载了wp-db抽象插件,将wp-db抽象化。php文件放入WordPress文件保存的文件夹中,按照我