问题描述:

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

 
SQL注入攻击相关链接:
 
 
 
 
 
 
 
 
 
 
 
 
 
 

PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?的更多相关文章

  1. MySQL字段数据全部查出【只保留中文、英文、数字、空格的词表】

    select * from xxx_xxx_bak where slot_type_id in ('xxx', 'xxx') ; by @大超超 记录备查

  2. MySQL中order by排序时,数据存在null咋办

    order by排序是最常用的功能,但是排序有时会遇到数据为空null的情况,这样排序就会乱了,这里以MySQL为例,记录我遇到的问题和解决思路. 问题: 网页要实现table的行鼠标拖拽排序,我用A ...

  3. EF中数据修改时动态更新其他数据

    场景 利用.net core开发时,经常会遇到使用EF(Entity Framework),但是今天在开发过程中发现一个值莫名其妙的自己变了,我怀疑是EF的问题. 主要代码如下: 1 // 最近一条告 ...

  4. MySQL中数据表的基本操纵

    本文基于对国家863中部软件孵化器编著的<MySQL从入门到精通>一书的操作实践.  一.创建数据表 数据表属于数据库,在创建数据表之前,应该使用语句 USE 数据库名  指定操作是在那个 ...

  5. python链接mysql以及mysql中对表修改的常用语法

    MySQL是一个关系型数据库管理系统 ,其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.在使用过程中不总是和它打交道,导致使用时候都得 ...

  6. mysql中,执行delete语句时出现Lock wait timeout exceeded问题

    问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现错误.但过了一会再次 ...

  7. MYSQL中的SELECT查询时进行运算

    SELECT在mysql中是查询表中的数据的作用,但也可以在查询的时候直接进行运算,然后返回查询后的结果 比如 )) FROM username2 其中的IFNULL函数是对adven数据进行判断,若 ...

  8. MySQL中in('5,6,7')只取第一个id为5对应的数据的思考

    通过阅读本文你可以更好的理解两个知识点: 1.#{}与${}在实际项目中的使用,避免在项目中使用不当造成不可预知的Bug; 2.MySQL中in里面如果是字符串的话,为什么只取第一个对应的数据,eg: ...

  9. java 读取mysql中数据 并取出

    public static String url = null; public static String username = null; public static String password ...

随机推荐

  1. [React Fundamentals] Composable Components

    To make more composable React components, you can define common APIs for similar component types. im ...

  2. 去掉html标签和空格等

    <?php$str = '<span style="color:#f00;">good; world</span>';echo $str.'<b ...

  3. linux上安装ftp

    1.安装 rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm 2.启动 service vsftpd start 3.连接 windows 命令行输入 ftp ww ...

  4. Spring3之事务管理

    事务管理是企业应用开发中确保数据完整性和一致性的关键技术.对于并发和分布式坏境中从不可预期的错误中恢复来说,事务管理特别重要.Spring作为一个企业应用框架,在不同的事务管理API之上提供了一个抽象 ...

  5. Java基础知识强化之多线程笔记02:多线程之 面试题(常问)

    1. 多线程有几种实现方案,分别是哪几种 ? 两种.   继承Thread类  实现Runnable接口 扩展一种:实现Callable接口.这个得和线程池结合. 2.  同步有几种方式,分别是什么? ...

  6. word-wrap,word-break,text-wrap的区别

    今晚看到了无双老师关于word-wrap,word-break区别的讲解  http://www.cnblogs.com/2050/archive/2012/08/10/2632256.html 受益 ...

  7. matlab的legend用法

    用Matlab画图时,有时候需要对各种图标进行标注,例如,用“+”代表A的运动情况,“*”代表B的运动情况. legend函数的基本用法是: LEGEND(string1,string2,string ...

  8. C#下利用封包、拆包原理解决Socket粘包、半包问题(新手篇)

    介于网络上充斥着大量的含糊其辞的Socket初级教程,扰乱着新手的学习方向,我来扼要的教一下新手应该怎么合理的处理Socket这个玩意儿. 一般来说,教你C#下Socket编程的老师,很少会教你如何解 ...

  9. 如何使用jQuery设置背景的透明度

    如何使用jQuery设置背景的透明度:使用CSS可以设置背景的透明度,具体方法可以参阅CSS如何设置div背景透明度且兼容性良好,不过使用CSS设置透明度没有动态效果,如果实现也比较困难,下面就介绍一 ...

  10. WebClient外部请求乱码

    WebClient web = new WebClient();//创建webclient对象 web.Encoding = Encoding.UTF8;//定义对象语言 var result = w ...