sql 语句中的引号不能忘
2011-12-11 03:00
183 查看
在我们学习PHP 语言中,学习PHP 对数据库的操作是必须要学习的。今天我尝试用PHP + MYSQL 来开发一个CMS。在写的过程中,才发现很多地方都没有搞明白。其中在这个问题上就开始纠结。
在做一个登陆的时候,我的登陆一直都没能成功,所以我就在网上不断的查找相关的信息。查找“PHP 登陆”的程序,想看看别人写的登陆程序。经过一番查找,我最终找到了一段成功的代码。但是我还是不死心,因为我以前也开发过类似的程序,虽然用的不是PHP 语言,但是我想我的思想肯定是正确的。经过反复的查证和思考,最终我发现了我程序失败的原因。
PHP 是一门弱语言。他对变量的处理非常的强悍。他不能够自动区分整型,字符串等变量。所以,在很多时候,在PHP 能处理的时候, MYSQL 却不一定能处理,因此我们一定要搞明白在PHP 与 MYSQL 交叉使用的时候,该语句是PHP 的服务器(apache)在执行还是MYSQL 在执行。
比如今天我遇到的这个问题。我有如下代码:
这段代码是我在网上查找后能够正确执行的代码。粗体部分就是我想说的,他是PHP 代码,是服务器在执行,这里的$name 是一个字符串,他与$row['reader_name'] 能够正常的匹配。
但是,我一开始的代码是:
这里就会出错,为什么呢,一直不知道答案,我开始一直都认为我这样写是正确的。确实,我的思想是正确的。但是我错了, 我错在将PHP 与 MYSQL 混淆了。我在将上面的sql 语句放到phpmyadmin 中去执行的时候,我终于意识到这个错误。因为我的name 本身是一个varchar 属性。所以他应该是字符串,字符串在数据库中需要用单引号括起来。但是我这里,却把他当作是PHP 代码,没有添加单引号。或许,这根本就不能算是错误,这只能算是自己没有真正认识这么语言。因而,我觉得这篇文章应该是用来提醒我,在以后的程序中,要将PHP
与 MYSQL 中的语法规则分辨清楚。
正确的代码:
就只有这么细微的变化而已!
在sql 语句中,如果变量是字符串那么相应的sql 语句中该加引号的地方一定记得添加上引号。
在做一个登陆的时候,我的登陆一直都没能成功,所以我就在网上不断的查找相关的信息。查找“PHP 登陆”的程序,想看看别人写的登陆程序。经过一番查找,我最终找到了一段成功的代码。但是我还是不死心,因为我以前也开发过类似的程序,虽然用的不是PHP 语言,但是我想我的思想肯定是正确的。经过反复的查证和思考,最终我发现了我程序失败的原因。
PHP 是一门弱语言。他对变量的处理非常的强悍。他不能够自动区分整型,字符串等变量。所以,在很多时候,在PHP 能处理的时候, MYSQL 却不一定能处理,因此我们一定要搞明白在PHP 与 MYSQL 交叉使用的时候,该语句是PHP 的服务器(apache)在执行还是MYSQL 在执行。
比如今天我遇到的这个问题。我有如下代码:
<? include 'conn.php'; if(isset($_POST['name']) && isset($_POST['pwd'])) { $db = new Conndb(); $name = $_POST['name']; $pwd = $_POST['pwd']; $sql = "select * from `readerinfo`"; echo $sql; $query = $db->mysql($sql); while($row = mysql_fetch_array($query)) { print_r($row); if($row['reader_pwd']==$pwd && $row['reader_name']==$name) { echo "LOGIN OK"; } else { echo "Login Error"; } } } else { echo "传送数据失败"; } ?>
这段代码是我在网上查找后能够正确执行的代码。粗体部分就是我想说的,他是PHP 代码,是服务器在执行,这里的$name 是一个字符串,他与$row['reader_name'] 能够正常的匹配。
但是,我一开始的代码是:
<? include 'conn.php'; if(isset($_POST['name']) && isset($_POST['pwd'])) { $db = new Conndb(); $name = $_POST['name']; $pwd = $_POST['pwd']; $sql = "select * from `readerinfo` where reader_pwd = {$pwd} and reader_name = {$name}"; echo $sql; $query = $db->mysql($sql); if($query) { echo 'LOGIN OK'; } else { echo 'LOGIN ERROR'; } } else { echo "传送数据失败"; } ?>
这里就会出错,为什么呢,一直不知道答案,我开始一直都认为我这样写是正确的。确实,我的思想是正确的。但是我错了, 我错在将PHP 与 MYSQL 混淆了。我在将上面的sql 语句放到phpmyadmin 中去执行的时候,我终于意识到这个错误。因为我的name 本身是一个varchar 属性。所以他应该是字符串,字符串在数据库中需要用单引号括起来。但是我这里,却把他当作是PHP 代码,没有添加单引号。或许,这根本就不能算是错误,这只能算是自己没有真正认识这么语言。因而,我觉得这篇文章应该是用来提醒我,在以后的程序中,要将PHP
与 MYSQL 中的语法规则分辨清楚。
正确的代码:
<? include 'conn.php'; if(isset($_POST['name']) && isset($_POST['pwd'])) { $db = new Conndb(); $name = $_POST['name']; $pwd = $_POST['pwd']; $sql = "select * from `readerinfo` where reader_pwd = '{$pwd}' and reader_name = '{$name}'"; echo $sql; $query = $db->mysql($sql); if($query) { echo 'LOGIN OK'; } else { echo 'LOGIN ERROR'; } } else { echo "传送数据失败"; } ?>
就只有这么细微的变化而已!
在sql 语句中,如果变量是字符串那么相应的sql 语句中该加引号的地方一定记得添加上引号。
相关文章推荐
- 初学 template.update里的SQL语句(引号内),不能用分号结束
- 在sql的函数里面不能使用insert语句,估计update、delete也不行,改为存储过程就行了。
- DB2 v8.2,我真败了,sql语句居然不能把常量的字符串转换成char
- SQL语句中条件里需要有单引号问题
- servlet 中sql语句的双引号和单引号的用法
- sql server中sql语句中单引号转义
- SSH框架中3.0版本不能执行SQL语句update,insert的解决办法。
- SQL中存储过程中SQL语句的单引号和双引号问题2
- 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
- SQL语句中的单引号处理以及模糊查询
- sql INSERT EXEC 语句不能嵌套 解决方案
- sql语句处理单引号,解决查询异常
- Sql语句不能识别Go的解决办法(动态创建表的触发器)
- SQL 语句之insert语句插入数据;若表中有重复的主键或数据插入的时候要求不能报错
- 拼接sql语句中单引号和双引号的问题
- 这段sql语句的引号阿,整了半天 and requst对象
- hibernateTemplate.save() 不能保存实体(能打印sql语句)
- sql 语句中的单引号,在c#中得注意
- mybatis#{}和${}的区别/去除生成的SQL语句的单引号
- Oracle的sql语句中关键字冲突用双引号