SELECT * FROM 模板 WHERE 模板名称=:模板名称,中文字段名作为占位符无法解析

1. 运行环境

CentOS Linux release 7.9.2009 (Core)

1). 当前使用的 Laravel 版本?

Laravel Framework 9.26.1

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
PHP 8.1.6 (cli) (built: Jun 8 2022 18:43:33) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies

5). 相关软件版本

MYSQL 5.7

2. 问题描述?

// SQL 占位符为中文字符时执行报错
$exist = DB::selectOne('SELECT `id` FROM `模板` WHERE `模板名称`=:模板名称 AND `DEL`=0', [
    '模板名称' =>'',
]);
// SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':模板名称 AND `DEL`=0' at line 1 (SQL: SELECT `id` FROM `模板` WHERE `模板名称`=:模板名称 AND `DEL`=0)

// 以下这种写法没有任何问题,只支持的
$exist = DB::table('模板')->where('模板名称', '')->where('DEL', 0)->first(['id']);

// 当前 SQL 在 MYQL 执行没有错误
mysql> SELECT `id` FROM `模板` WHERE `模板名称`='' AND `DEL`=0;
Empty set

3. 您期望得到的结果?

支持中文字段名占位符

4. 您实际得到的结果?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

方向:中文 –> Unicode –> PDO –> 源码

最后一次的 Google 检索词:pdo bind named param unicode name

stackoverflow:PDO valid characters for placeholders

2年前 评论
讨论数量: 7

我是第一次见到用中文做字段名的 换个名字不行吗?

2年前 评论
jiangshengxin (楼主) 2年前
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Marc']);

试试这种

2年前 评论
jiangshengxin (楼主) 2年前

file

2年前 评论
jiangshengxin (楼主) 2年前

方向:中文 –> Unicode –> PDO –> 源码

最后一次的 Google 检索词:pdo bind named param unicode name

stackoverflow:PDO valid characters for placeholders

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!