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. 您实际得到的结果?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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

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

stackoverflow:PDO valid characters for placeholders

1年前 评论
讨论数量: 7

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

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

试试这种

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

file

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

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

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

stackoverflow:PDO valid characters for placeholders

1年前 评论

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