PHP 插入数据sql语句增删改查一直报错。

PHP实现基本的数据库连接、执行SQL语句及错误提示
原创
 15:48:47
971
本篇文章主要介绍PHP实现基本的数据库连接、执行SQL语句及错误提示,感兴趣的朋友参考下,希望对大家有所帮助。本文实例讲述了php实现比较全的数据库操作类,具体如下:&?php
class database
function __construct()
$this-&hostname=&localhost&;
$this-&user=&root&;
$this-&pass=&111&;
$this-&dbname=&&;
$this-&charset=&utf8&; //gb2312 GBK utf8
$this-&linkflag=mysql_connect($this-&hostname,$this-&user,$this-&pass);
mysql_select_db($this-&dbname,$this-&linkflag) or die($this-&error());
mysql_query(&set names &.$this-&charset);
function __set($property_name,$value)
return $this-&$property_name=$
function __get($property_name)
if(isset($this-&$property_name))
return $this-&$property_
function __call($function_name, $args)
echo &&br&&font color=#ff0000&你所调用的方法 $function_name 不存在&/font&&br&\n&;
function query($sql)
$res=mysql_query($sql) or die($this-&error());
function fetch_array($res)
return mysql_fetch_array($res);
function fetch_object($res)
return mysql_fetch_object($res);
function fetch_obj_arr($sql)
$obj_arr=array();
$res=$this-&query($sql);
while($row=mysql_fetch_object($res))
$obj_arr[]=$
return $obj_
function error()
if($this-&linkflag)
return mysql_error($this-&linkflag);
else return mysql_error();
function errno()
if($this-&linkflag)
return mysql_errno($this-&linkflag);
else return mysql_errno();
function affected_rows()
return mysql_affected_rows($this-&linkflag);
function num_rows($sql)
$res=$this-&execute($sql);
return mysql_num_rows($res);
function num_fields($res)
return mysql_num_fields($res);
function insert_id()
$previous_id=mysql_insert_id($this-&linkflag);
return $previous_
function result($res,$row,$field=null)
if($field===null)
$res=mysql_result($res,$row);
else $res=mysql_result($res,$row,$field);
function version()
return mysql_get_server_info($this-&linkflag);
function data_seek($res,$rowNum)
return mysql_data_seek($res,$rowNum);
function __destruct()
//mysql_close($this-&linkflag);
?&总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。相关推荐:以上就是PHP实现基本的数据库连接、执行SQL语句及错误提示的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(111086)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(109025)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(83675)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(82874)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(80094)
全栈工程师
文章总浏览数
相关视频章节php防止SQL注入详解及防范
转载 &更新时间:日 11:27:25 & 作者:
SQL 注入是PHP应用中最常见的漏洞之一。事实上令人惊奇的是,开发者要同时犯两个错误才会引发一个SQL注入漏洞
一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数据库方案),考虑以下简单的登录表单: 代码如下:&form action="/login.php" method="POST"&&p&Username: &input type="text" name="username" /&&/p&&p&Password: &input type="password" name="password" /&&/p&&p&&input type="submit" value="Log In" /&&/p&&/form&作为一个攻击者,他会从推测验证用户名和密码的查询语句开始。通过查看源文件,他就能开始猜测你的习惯。比如命名习惯。通常会假设你表单中的字段名为与数据表中的字段名相同。当然,确保它们不同未必是一个可靠的安全措施。第一次猜测,一般会使用下面例子中的查询: 代码如下:&?php&$password_hash = md5($_POST['password']);$sql = "SELECT count(*)&&&&& FROM&& users&&&&& WHERE& username = '{$_POST['username']}'&&&&& AND&&& password = '$password_hash'";&?&使用用户密码的MD5值原来是一个通行的做法,但现在并不是特别安全了。最近的研究表明MD5算法有缺陷,而且大量MD5数据库降低了MD5反向破解的难度。请访问http://md5.rednoize.com/ 查看演示(原文如此,山东大学教授王小云的研究表明可以很快的找到MD5的“碰撞”,就是可以产生相同的MD5值的不同两个文件和字串。MD5是信息摘要算法,而不是加密算法,反向破解也就无从谈起了。不过根据这个成果,在上面的特例中,直接使用md5是危险的。)。最好的保护方法是在密码上附加一个你自己定义的字符串,例如: 代码如下:&?php&$salt = 'SHIFLETT';$password_hash = md5($salt . md5($_POST['password'] . $salt));&?&当然,攻击者未必在第一次就能猜中,他们常常还需要做一些试验。有一个比较好的试验方式是把单引号作为用户名录入,原因是这样可能会暴露一些重要信息。有很多开发人员在Mysql语句执行出错时会调用函数mysql_error()来报告错误。见下面的例子: 代码如下:&?php&mysql_query($sql) or exit(mysql_error());&?&虽然该方法在开发中十分有用,但它能向攻击者暴露重要信息。如果攻击者把单引号做为用户名,mypass做为密码,查询语句就会变成: 代码如下:&?php&$sql = "SELECT *&&&&& FROM&& users&&&&& WHERE& username = '''&&&&& AND&&& password = 'a029d0df84eba9ef389e5'";&?&当该语句发送到MySQL后,系统就会显示如下错误信息: 代码如下:You have an error in your SQL syntax. Check the manual that corresponds to yourMySQL server version for the right syntax to use near 'WHERE username = ''' ANDpassword = 'a029d0df84eb55不费吹灰之力,攻击者已经知道了两个字段名(username和password)以及他们出现在查询中的顺序。除此以外,攻击者还知道了数据没有正确进行过滤(程序没有提示非法用户名)和转义(出现了数据库错误),同时整个WHERE条件的格式也暴露了,这样,攻击者就可以尝试操纵符合查询的记录了。在这一点上,攻击者有很多选择。一是尝试填入一个特殊的用户名,以使查询无论用户名密码是否符合,都能得到匹配: 代码如下:myuser' or 'foo' = 'foo' --假定将mypass作为密码,整个查询就会变成: 代码如下:&?php$sql = "SELECT *&&&&& FROM&& users&&&&& WHERE& username = 'myuser' or 'foo' = 'foo' --&&&&& AND&&& password = 'a029d0df84eba9ef389e5'";?&幸运的是,SQL注入是很容易避免的。正如前面所提及的,你必须坚持过滤输入和转义输出。虽然两个步骤都不能省略,但只要实现其中的一个就能消除大多数的SQL注入风险。如果你只是过滤输入而没有转义输出,你很可能会遇到数据库错误(合法的数据也可能影响SQL查询的正确格式),但这也不可靠,合法的数据还可能改变SQL语句的行为。另一方面,如果你转义了输出,而没有过滤输入,就能保证数据不会影响SQL语句的格式,同时也防止了多种常见SQL注入攻击的方法。当然,还是要坚持同时使用这两个步骤。过滤输入的方式完全取决于输入数据的类型(见第一章的示例),但转义用于向数据库发送的输出数据只要使用同一个函数即可。对于MySQL用户,可以使用函数mysql_real_escape_string( ): 代码如下:&?php&$clean = array();$mysql = array();$clean['last_name'] = "O'Reilly";$mysql['last_name'] = mysql_real_escape_string($clean['last_name']);$sql = "INSERT&&&&& INTO&& user (last_name)&&&&& VALUES ('{$mysql['last_name']}')";&?&尽量使用为你的数据库设计的转义函数。如果没有,使用函数addslashes()是最终的比较好的方法。当所有用于建立一个SQL语句的数据被正确过滤和转义时,实际上也就避免了SQL注入的风险。如果你正在使用支持参数化查询语句和占位符的数据库操作类(如PEAR::DB, PDO等),你就会多得到一层保护。见下面的使用PEAR::DB的例子: 代码如下:&?php$sql = 'INSERT&&&&& INTO&& user (last_name)&&&&& VALUES (?)';$dbh-&query($sql, array($clean['last_name']));?&由于在上例中数据不能直接影响查询语句的格式,SQL注入的风险就降低了。PEAR::DB会自动根据你的数据库的要求进行转义,所以你只需要过滤输出即可。如果你正在使用参数化查询语句,输入的内容就只会作为数据来处理。这样就没有必要进行转义了,尽管你可能认为这是必要的一步(如果你希望坚持转义输出习惯的话)。实际上,这时是否转义基本上不会产生影响,因为这时没有特殊字符需要转换。在防止SQL注入这一点上,参数化查询语句为你的程序提供了强大的保护。注:关于SQL注入,不得不说的是现在大多虚拟主机都会把magic_quotes_gpc选项打开,在这种情况下所有的客户端GET和POST的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是不可行的,但要防止对数字值的SQL注入,如用intval()等函数进行处理。但如果你编写的是通用软件,则需要读取服务器的magic_quotes_gpc后进行相应处理。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具include(conn/conn.php);
if($_POST[submit]){
$code = $_POST['code'];
$note = $_POST['note'];
$routeway = $_POST['routeway'];
$operator = $_POST['operator'];
if($code!= "" || $note != "" || $routeway != "" || $operator !=""){
$sql ="INSERT INTO code_group
(groupNumber,groupCode,groupNote,groupRouteway,groupOperator) VALUES('','$code','$note','$routeway','$operator')";
if(mysql_query($sql)){
echo"&script&alert('插入成功');&/script&";
echo"&script&alert('插入失败');&/script&";
echo"&script&alert('您输入的内容为空');&/script&";
这是库设置
CREATE TABLE `code_group` (
`groupNumber` smallint(6) NOT NULL,
`groupCode` char(8) NOT NULL,
`groupNote` varchar(100) NOT NULL,
`groupRouteway` char(15) NOT NULL,
`groupOperator` char(4) NOT NULL,
PRIMARY KEY (`groupNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP程序能运行没问题,连接数据库也正常,就是插不进去数据,不知道是怎么原因。
sql insert语句进入插入操作时,遇到插入失败但又没有提示信息时的个人原因
在要插入语句前
set names utf8
表数据insert不进去的可能原因
直接说明原因吧,基本的insert语句
INSERT INTO T_CUR_FAULT(I_FAULT_ID, I_FAULT_OBJ_TYPE, S_FAULT_OBJ_TYPE_NAME)
向mysql数据表中插入数据失败的原因
1.案例代码:
$sql1=&insert into content(category,subject,content,username,release_date) values('{$categ...
向MySQL数据库中插入数据,sql语句没问题,但插入失败也不报错的原因
这几天在做一个Javaweb的图书商城项目,在操作数据库的过程中,遇到一个问题?
向数据库中的order数据表中插入数据时,一直插入数据失败。没有报SQL语...
insert into 失败
主键的作用
constraint [pk_users] primary key clustered
这是在userid列上创建一个唯一聚集索引的语句。
primary key表明创建的是主键约束,culst...
当你在SQL Server上试图更新一个索引视图引用的表时,你可能回收到如下有错误INSERT 失败,因为下列 SET 选项的设置不正确: ARITHABORT在计算列或索引视图上创建或操作索引时,S...
今天遇到很郁闷的问题、我在android项目中往数据库中插入一条数据总是插入失败,Log日志提示我没有找到该字段,我是检验了数据库很久、明明有该字段,之前好像也遇到过这样的问题,当时是解决了、郁闷的是...
昨天遇到一个奇葩问题, 一组不重复的数据在插入数据库的时候
数据 a 出现unique failed , 但是插入成功
数据 b 没有报错, 但是插入失败
并且发现for循环内都遍...
在论坛中回答了一个问题,导入csv 数据,并对导入的数据增加一个新的列date datetime。要求在10s内完成,200w行数据的导入.分享下解决问题的思路和方法...
数据库学习 - insert into(插入数据)
向表中添加数据
Insert into 简单语法形式:
Insert into 表名[(列名[,列名]...)] values(值
[,值],...);
Values 后面的值的排列要与...
没有更多推荐了,21:51 提问
Php执行SQL语句一直失败
$sql="INSERT INTO message (author, subject, content, date)
values ('$author', '$subject', '$content', '$current_time')";
$result=execute_sql($link,"guestbook",$sql);
echo $sql 结果如下
直接复制到MYSQL可以成功执行
INSERT INTO message (author, subject, content, date) values ('sun', 'smile', '', ' 21:48:11')
执行失败INSERT INTO message (author, subject, content, date) values ('sun', 'smile', '', ' 21:48:11')
You have an error in your SQL check the manual that corresponds to your MySQL server version for the right syntax to use near ''smile', '', ' 21:48:11')' at line 2
按赞数排序
你的sql不能换行。如果非要换行,得写
$sql = "..." +
检查下字段的类型,int类型的不用加''
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐php语句插入一条数据到数据库,就是一直报错烦啊_百度知道
php语句插入一条数据到数据库,就是一直报错烦啊
&?php$con=mysql_connect(&localhost&,&xgszl33614&,&xgszl33614&);if(!$con){die('Couldnotconnect:'.mysql_error());}mysql_select_db(&jph_dzsw&,$con);$sql=&insertintoordervalu...
&?php$con = mysql_connect(&localhost&,&xgszl33614&,&xgszl33614&);if (!$con)
die('Could not connect: ' . mysql_error());
}mysql_select_db(&jph_dzsw&, $con);$sql=&insert into order values ('1','2','3','4','5','6','7')&;if (!mysql_query($sql,$con))
die('Error: ' . mysql_error());
}echo &1 record added&;mysql_close($con)?&连接数据库成功,一到插入就报错:Error: You have an error in your SQL check the manual that corresponds to your MySQL server version for the right syntax to use near 'order values ('1','2','3','4','5','6','7')' at line 1数据库order表:order(id(int),name(char),telephone(char),count(int),type(char),date(char)needs(char))
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
wixiaoduan
wixiaoduan
采纳数:701
获赞数:1096
表名order是mysql的保留关键字,不能这样直接使用,需要加上反引号(`,~上面那个,1旁边)$sql=&insert&into&`order`&values&('1','2','3','4','5','6','7')&;
啊,原来这么快就回了,后来找到原因了,就是你说的。谢谢!
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 sql更新数据语句 的文章

 

随机推荐