问题描述:
用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接)
经测试,代码只能对数字进行正常的增删改操作,非数字操作无效
但要在课程名称中输入中文,应该如果修改呢?
存在问题的代码主要是:
$sql
=
mysql_query(
"insert into kcb values($kch,$kcm,$kkxq,$xs,$xf)"
);
数据库的数据:

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