Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用类似mysql的语句_Php_Mysql_Pdo_Prepared Statement - Fatal编程技术网

Php 使用类似mysql的语句

Php 使用类似mysql的语句,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,我试图创建一个重复的用户名检查,我想这可能是这样做的方式纠正我,如果我错了。基本上,我希望用户名和用户输入存储在一个名为username的变量中,然后使用该变量检查数据库中是否有LIKE行,如果有,则向名为$count的变量返回一个或多个计数,然后我将有一个if ELSE语句对用户大喊大叫或让他们继续。我在使用LIKE语句时遇到了问题。我认为我的语法可能是错误的,因为我已经尝试了几种不同的方法,但仍然没有运气 主代码 尝试使用此选项: (“从CLL_users中选择COUNT(*),其中user

我试图创建一个重复的用户名检查,我想这可能是这样做的方式纠正我,如果我错了。基本上,我希望用户名和用户输入存储在一个名为
username
的变量中,然后使用该变量检查数据库中是否有
LIKE
行,如果有,则向名为
$count
的变量返回一个或多个计数,然后我将有一个
if ELSE
语句对用户大喊大叫或让他们继续。我在使用
LIKE
语句时遇到了问题。我认为我的语法可能是错误的,因为我已经尝试了几种不同的方法,但仍然没有运气

主代码
尝试使用此选项:


(“从
CLL_users
中选择COUNT(*),其中
user_name
类似“%.”“$userName.”)

您似乎试图在MySQL中使用无效语法进行字符串连接。试试这个:

'SELECT COUNT(*) FROM `CLL_users` WHERE `user_name` LIKE CONCAT("%",:userName)'

您可能可以使用=而不是LIKE。SQL语法本身不区分大小写。我认为您可以设置数据库,使某些表区分大小写,但通过使用,我知道我自己的MySQL数据库中没有表是区分大小写的。如果您不确定这是否容易尝试,只需使用您知道的用户名运行select,但使用不同的大小写即可


只需选择“user\u name”=$entered\u username,如果您得到一个或多个用户名,请不要添加新用户,否则请继续。当然,您可以将user_字段标记为唯一,这样您就可以确定不会有重复项,这可能是值得一看的。

在查找可能的重复项时,为什么要使用
之类的
和通配符?查找精确匹配(使用
=
)如果我使用
=
操作符,是否不区分大小写?我阅读
LIKE
操作符不区分大小写。如果用户名是
Test
,并且数据库中已经有一个
Test
,我不希望用户能够创建帐户。您也可以使用
UPPER
(或<代码>下部<代码>)将所有内容转换为大写,从而不需要区分大小写这是一种自然的SQL注入漏洞。@MichaelRice我在问题中试图实现的代码不受SQL注入的影响,对吗?有人告诉我,使用PDO准备的语句是防止这种情况发生的最佳方法。是的,如果使用它可以正确使用。例如,使用绑定函数。
'SELECT COUNT(*) FROM `CLL_users` WHERE `user_name` LIKE CONCAT("%",:userName)'