·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
php 向 MySQL 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

问题描述:

用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接)经测试,代码只能对数字进行正常的增删改操作,非数字操作无效但要在课程名称中输入中文,应该如果修改呢?存在问题的代码主要是:$sql=mysql_query("insertintokcbvalues($kch,$kcm,$kkxq,$xs,$xf)");
数据库的数据:代码(代码是正确的)如下:<?phpif(isset($_POST["change"])){//修改$kch=$_POST['kch'];//课程号$kcm=$_POST['kcm'];//课程名$kkxq=$_POST['kkxq'];//开课学期$xs=$_POST['xs'];//学时$xf=$_POST['xf'];//学分$sql=mysql_query("updatekcbsetKCM='$kcm',KKXQ=$kkxq,XS=$xs,XF=$xfwhereKCH=$kch");echo"<script>alert('修改信息成功');</script>";}if(isset($_POST["add"])){//增加$kch=$_POST['kch'];//课程号$kcm=$_POST['kcm'];//课程名$kkxq=$_POST['kkxq'];//开课学期$xs=$_POST['xs'];//学时$xf=$_POST['xf'];//学分$sql=mysql_query("insertintokcbvalues($kch,'$kcm',$kkxq,$xs,$xf)");echo"<script>alert('添加信息成功');</script>";}if(isset($_POST["delete"])){//删除$kch=$_POST['kch'];//课程号$sql=mysql_query("deletefromkcbwhereKCH=$kch");echo"<script>alert('删除信息成功');</script>";}?>
问题解决:(都是猜的)由于只对数字有效,故推测传进数据库的数据类型存在问题。但通过 var_dump($kcm) 得到数据类型是 string 类型。那么要向数据库传入字符串变量怎么做?经测试:可行办法是,给该行代码中的字符串变量加单引号:$sql=mysql_query("insertintokcbvalues($kch,'$kcm',$kkxq,$xs,$xf)");
但思考到,PHP中双引号才解析变量,所以就有点混乱了,故百度了一下PHP单引号和双引号的区别。值得一看:http://www.jb51.net/article/21035.htm从这个链接中,弄懂了一些问题。总结如下:
总结:1、简单概括:双引号中的变量可以解析,单引号就是绝对的字符串。单引号、双引号必须成对使用,2、单引号中的 “\” 反斜杠会被直接输出,双引号中的反斜杠才会被解析为转义字符。3PHP复杂的变量用花括号括起来,语法分析器就能正确分析。如:{$a[$i][$j]} 如果要在字符串本身中引用花括号,要用转义字符。4、在插入数据库的SQL语句是采用单引号来定义字符串。 如果要将一个含有单引号的字符串插入数据库,要用转义字符。 或者使用 addslashes() 函数,该函数的功能:在指定的预定义字符前添加反斜杠。 使用该函数可防止SQL注入攻击。
这些预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL

SQL注入攻击相关链接:http://zh.wikipedia.org/wiki/SQL%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BBhttp://welcome6.blog.163.com/blog/static/189281346201001694237345/

来自为知笔记(Wiz)