问题描述:

 

用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接)

经测试,代码只能对数字进行正常的增删改操作,非数字操作无效

 

但要在课程名称中输入中文,应该如果修改呢?

 

存在问题的代码主要是:

$sql = mysql_query("insert into kcb values($kch,$kcm,$kkxq,$xs,$xf)");

 

数据库的数据:

mysql修改enum数据 在mysql 中怎么修改数据_字符串

 

代码(代码是正确的)如下:

<?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>";
    }
?>

 


问题解决:

 

(都是猜的)

 

由于只对数字有效,故推测传进数据库的数据类型存在问题。

 

但通过 var_dump($kcm) 得到数据类型是 string 类型。

 

那么要向数据库传入字符串变量怎么做?


经测试:

可行办法是,给该行代码中的字符串变量加单引号:

$sql = mysql_query("insert into kcb values($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