zoukankan      html  css  js  c++  java
  • PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

    问题描述:

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

    问题解决:
     
    (都是猜的)
     
    由于只对数字有效,故推测传进数据库的数据类型存在问题。
     
    但通过 var_dump($kcm) 得到数据类型是 string 类型。
     
    那么要向数据库传入字符串变量怎么做?
     
    经测试:
    可行办法是,给该行代码中的字符串变量加单引号:
    $sql = mysql_query("insert into kcb values($kch,'$kcm',$kkxq,$xs,$xf)"); 
     

    但思考到,PHP中双引号才解析变量,所以就有点混乱了,故百度了一下PHP单引号和双引号的区别
     
     
    从这个链接中,弄懂了一些问题。总结如下:
     

    总结:
     
    1、简单概括:双引号中的变量可以解析,单引号就是绝对的字符串。单引号、双引号必须成对使用,
     
    2、单引号中的 “” 反斜杠会被直接输出,双引号中的反斜杠才会被解析为转义字符。
     
    3PHP复杂的变量用花括号括起来,语法分析器就能正确分析。如:{$a[$i][$j]}
         如果要在字符串本身中引用花括号,要用转义字符。
     
    4、在插入数据库的SQL语句是采用单引号来定义字符串。
          如果要将一个含有单引号的字符串插入数据库,要用转义字符。
          或者使用 addslashes() 函数,该函数的功能:在指定的预定义字符前添加反斜杠。
          使用该函数可防止SQL注入攻击。
          
    这些预定义字符是:  
              单引号(')
              双引号(")
              反斜杠()
              NULL
     

     
    SQL注入攻击相关链接:
     
     
     
     
     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    rmq +二分暴力 hdu 5726
    8.25 ccpc 比赛总结
    莫比乌斯反演题目总结
    HDU 4848 Wow! Such Conquering! (搜索+floyd)
    Codeforces 982 C Cut 'em all!(DFS)
    Codefoces 986C AND Graph(DFS)
    CodeForces 986A Fair(BFS)
    ACM经验贴
    Kattis A+B Problem(FFT)
    CF E. Porcelain (双向dp)
  • 原文地址:https://www.cnblogs.com/zhanyao/p/3690074.html
Copyright © 2011-2022 走看看