sql 语句中的引号不能忘


    在我们学习PHP 语言中,学习PHP 对数据库的操作是必须要学习的。今天我尝试用PHP + MYSQL 来开发一个CMS。在写的过程中,才发现很多地方都没有搞明白。其中在这个问题上就开始纠结。


    在做一个登陆的时候,我的登陆一直都没能成功,所以我就在网上不断的查找相关的信息。查找“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 语句中该加引号的地方一定记得添加上引号。













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值