WordPress数据库SQL语法错误求助:添加空格后SQL查询不生效
搞定WordPress数据库SQL语法错误
咱们先把问题拆明白:你遇到的MySQL语法错误,完全是因为SQL字符串拼接时没加空格搞出来的!
问题到底出在哪?
你原来的代码里,"select * from".$this->tables->tableCustomer()."where..."这部分拼接后,生成的SQL会变成这样:
select * fromwpiy_veosoft_crm_customerwhere Id = 957
你看,from直接跟表名粘在一起,表名又和where粘成一团,MySQL肯定看不懂这种“四不像”的语法呀!
正确写法&你踩的小坑
你想加空格的思路绝对是对的,但之前没成功大概率是因为ARRAY_A的位置放错了——它不是prepare的参数,而是用来获取查询结果的方法(比如get_row或get_results)的参数。
给你写好的正确代码
如果是要获取单条客户数据,用get_row:
$customer = $wpdb->get_row( $wpdb->prepare( "select * from " . $this->tables->tableCustomer() . " where Id = %d", $data_id ), ARRAY_A );
要是需要多条结果,就换成get_results:
$customers = $wpdb->get_results( $wpdb->prepare( "select * from " . $this->tables->tableCustomer() . " where Id = %d", $data_id ), ARRAY_A );
为啥你之前的尝试没生效?
你之前写的, ARRAY_A直接跟在prepare后面,这是语法错误——prepare只负责把SQL和参数安全绑定,真正执行查询并返回数组格式的结果,得靠get_row或get_results来完成。
额外调试小技巧
以后再遇到SQL错误,直接加一句echo $wpdb->last_query;就能看到最终生成的SQL语句,一眼就能揪出这种空格、拼接类的小问题,超级好用!
内容的提问来源于stack exchange,提问作者JonasW
相关产品推荐
相关产品推荐

