问题描述:

 
用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. mysqldump备份7

    http://www.cnblogs.com/ivictor/p/5505307.html   对于MySQL的备份,可分为以下两种: 1. 冷备 2. 热备 其中,冷备,顾名思义,就是将数据库关掉, ...

  2. 初探 MySQL 的 Binlog

    https://xcoder.in/2015/08/10/mysql-binlog-try/

  3. JavaScript网站设计实践(五)编写photos.html页面,实现点击缩略图显示大图的效果

    一.photos.html页面,点击每一张缩略图,就在占位符的位置那里,显示对应的大图. 看到的页面效果是这样的: 1.实现思路 这个功能在之前的JavaScript美术馆那里已经实现了. 首先在页面 ...

  4. 控制器跳转:tabbarcontroller怎么写代码切换视图?

    项目中有时候需要在界面中进行跳转  常用的有push  present等方法  但想要在tabbarcontroller的某个子控制器跳转到另一个子控制器  怎么做? 只需要一行代码: 1是你需要跳转 ...

  5. matrix computing optimization schemes

    * stackoverflow: how does BLAS get such extern performance * Howto optimizate GEMM http://wiki.cs.ut ...

  6. [未完成]关于枚举(Enum)

    今天总结一下枚举相关的知识.先附一段关于枚举的代码: package org.talend.core.model.param; import org.talend.core.i18n.Messages ...

  7. 关于Git里程碑

    里程碑即Tag,是人为对提交进行的命名.这和Git的ID是否太长无关.使用任何数字版本号无论长短, 都没有使用一个直观的表意的字符串来的方便.例如:用里程碑名称"v2.1"对应软件 ...

  8. jQuery图片无缝滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Executor 和Executors

    Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具.真正的线程池接口是ExecutorService. 下面这张图完整描述了线程 ...

  10. .Net 动态代理,AOP

    .Net 动态代理,AOP 直接上代码了. /***************************************** * author:jinshuai * * E-mail:redfox ...