php,查询mysqlmysql 查询数据表字段问题

&用户数据查询
用户数据查询
开通极客学院VIP会员,免费观看全站课程
最低 21.6 元 / 月
VIP会员尊享特权
观看全部课程
720P高清视频下载(年会员专享)
已有会员账号,请
视频太卡?试试切换线路
本课讲解 MySQL 基本知识以、PhpMyAdmin 的作用以及常用的操作 MySQL 的基本知识。
本课讲解如何使用 PHP 代码连接 MySQL 数据库、操作 MySQL 数据库。
本课讲解如何使用 PHP 连接 MySQL 数据库查询用户数据,并呈现在前端页面中。
本课讲解如何使用 PHP 向数据库中添加用户数据,并且讲解在操作过程中如何防止 SQL 注入攻击。
本课讲解如何使用 PHP 修改数据库中的用户数据,并且呈现在页面中。
本课讲解如何使用 PHP 删除数据库中的记录,并且将结果呈现在页面中。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [用户数据查询]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [用户数据查询]
正在读取中...
正在读取中...PHP开发者常犯的10个MySQL错误
发表于 09:04|
来源lupaworld|
作者lupaworld
摘要:PHP看起来很简单,一个初学者也可以几个小时内就能开始写函数了,但是建立一个稳定、可靠的数据库确需要时间和经验。文中总结了一些经验,不仅仅是MySQL,其他数据库也一样可以参考。
数据库是Web大多数应用开发的基础。如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分。
PHP看起来很简单,一个初学者也可以几个小时内就能开始写函数了。但是建立一个稳定、可靠的数据库确需要时间和经验。下面就是一些这样的经验,不仅仅是MYSQL,其他数据库也一样可以参考。
1.使用MyISAM而不是InnoDB
MySQL有很多的数据库引擎,单一般也就用MyISAM和InnoDB。
MyISAM 是默认使用的。但是除非你是建立一个非常简单的数据库或者只是实验性的,那么到大多数时候这个选择是错误的。MyISAM不支持外键的约束,这是保证数据完整性的精华所在啊。另外,MyISAM会在添加或者更新数据的时候将整个表锁住,这在以后的扩展性能上会有很大的问题。
解决办法很简单:使用InnoDB。
2.使用PHP的mysql方法
PHP从一开始就提供了MySQL的函数库。很多程序都依赖于mysql_connect、mysql_query、mysql_fetch_assoc等等,但是PHP手册中建议:
如果你使用的MySQL版本在4.1.3之后,那么强烈建议使用mysqli扩展。
mysqli,或者说MySQL的高级扩展,有一些优点:
有面向对象的接口
prepared statements(预处理语句,可以有效防止SQL-注入攻击,还能提高性能)
支持多种语句和事务
另外,如果你想支持多数据库那么应该考虑一下PDO。
3.不过滤用户输入
应该是:永远别相信用户的输入。用后端的PHP来校验过滤每一条输入的信息,不要相信Javascript。像下面这样的SQL语句很容易就会被攻击:
$username&=&$_POST[&name&]; &&
$password&=&$_POST[&password&]; &&
$sql&=&&SELECT&userid&FROM&usertable&WHERE&username='$username'AND&password='$password';&;&//&run&query... &&
这样的代码,如果用户输入&admin&;&那么,就相当于下面这条了:
SELECT&userid&FROM&usertable&WHERE&username='admin'; &&
这样入侵者就能不输入密码,就通过admin身份登录了。
4.不使用UTF-8
那些英美国家的用户,很少考虑语言的问题,这样就造成很多产品就不能在其他地方通用。还有一些GBK编码的,也会有很多的麻烦。
UTF-8解决了很多国际化的问题。虽然PHP6才能比较完美的解决这个问题,但是也不妨碍你将MySQL的字符集设置为UTF-8。
5.该用SQL的地方使用PHP
如果你刚接触MySQL,有时候解决问题的时候可能会先考虑使用你熟悉的语言来解决。这样就可能造成一些浪费和性能比较差的情况。比如:计算平均值的时候不适用MySQL原生的AVG()方法,而是用PHP将所有值循环一遍然后累加计算平均值。
另外还要注意SQL查询中的PHP循环。通常,在取得所有结果之后再用PHP来循环的效率更高。
一般在处理大量数据的时候使用强有力的数据库方法,更能提高效率。
6.不优化查询
99%的PHP性能问题都是数据库造成的,一条糟糕的SQL语句可能让你的整个程序都非常慢。MySQL的EXPLAIN statement,Query Profiler,many other tools的这些工具可以帮你找出那些调皮的SELECT。
7.使用错误的数据类型
MySQL提供一系列数字、字符串、时间等的数据类型。如果你想存储日期,那么就是用DATE或者DATETIME类型,使用整形或者字符串会让事情更加复杂。
有时候你想用自己定义的数据类型,例如,使用字符串存储序列化的PHP对象。数据库的添加可能很容易,但是这样的话,MySQL就会变得很笨重,而且以后可能导致一些问题。
8.在SELECT查询中使用*
不要使用*在表中返回所有的字段,这会非常的慢。你只需要取出你需要的数据字段。如果你需要取出所有的字段,那么可能你的表需要更改了。
9.索引不足或者过度索引
一般来说,应该索引出现在SELECT语句中WHERE后面所有的字段。
例如,假如我们的用户表有一个数字的ID(主键)和email地址。登录之后,MySQL应该通过email找到相应的ID。通过索引,MySQL可以通过搜索算法很快的定位email。如果没有索引,MySQL就需要检查每一项记录直到找到。
这样的话,你可能想给每一个字段都添加索引,但是这样做的后果就是在你更新或者添加的时候,索引就会重新做一遍,当数据量大的时候,就会有性能问题。所以,只在需要的字段做索引。
也许不常发生,但是数据库损毁,硬盘坏了、服务停止等等,这些都会对数据造成灾难性的破坏。所以你一定要确保自动备份数据或者保存副本。
11.另外:不考虑其他数据库
MySQL可能是PHP用的最多的数据库了,但是也不是唯一的选择。 PostgreSQL和Firebird也是竞争者,他们都开源,而且不被某些公司所控制。微软提供SQL Server Express,Oracle有10g Express,这些企业级的也有免费版。SQLite对于一些小型的或者嵌入式应用来说也是不错的选择。
文章出自:
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章mysql查询今天、昨天、7天、近30天、本月数据
mysql查询今天、昨天、7天、近30天、本月数据
查看次数47284 发表时间 08:54:16
  mysql查询今天、昨天、7天、近30天、本月数据进行网站文档数据汇总也算mysql技巧了!爱微网亲测成功!
  mysql查询今天、昨天、7天、近30天、本月数据进行网站文档数据汇总也算mysql技巧了!爱微网亲测成功
  【`date` DATETIME NULL DEFAULT NULL COMMENT '时间'】
  【时间类型: 17:22:16】
  select * from 表名 where to_days(时间字段名)=to_days(now());
  SELECT * FROM `表名` where TO_DAYS(NOW()) & TO_DAYS(时间字段名) = 1;
  /*DATEDIFF(now() , FROM_UNIXTIME(`时间字段名`)) = 1; //时间字段 存储类型为时间戳*/
  SELECT * FROM `表名` where DATE_SUB(CURDATE(), INTERVAL 7 DAY) &= date(时间字段名);
  /*DATEDIFF(now() , FROM_UNIXTIME(`时间字段名`)) = 7; //时间字段 存储类型为时间戳*/
  近30天
  SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) &= date(时间字段名);
  SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名, '%Y%m' = DATE_FORMAT(CURDATE(), '%Y%m';
(转发请注明转自:)
&&相关推荐
&&&&&&( 08:54:16)
&&&&&&( 08:54:16)
&&&&&&( 09:51:17)
&&&&&&( 09:51:23)
&&&&&&( 09:53:02)
&&&&&&( 08:54:16)
&&&&&&( 11:56:55)
&&&&&&( 11:52:27)
&&&&&&( 10:54:14)
&&&&&&( 23:33:26)
&&发表评论
(不超过20个字符或10个汉字)
最新发布...
最新推荐...
浏览最多...
点击:130357
点击:122131
点击:108454
点击:89270
点击:84574
点击:72692
点击:71105
点击:70078
点击:65035
点击:61362PHP访问MySQL数据库,设定查询超时处理时间_最火下载站
您的位置: >
> PHP访问MySQL数据库,设定查询超时处理时间
PHP访问MySQL数据库,设定查询超时处理时间
PHP连接MySQL主要是使用Mysql提供的 libmysqlclient 的客户端库,同时也延伸出来 mysql 和& mysqli 两套PHP的扩展,相对来说 mysqli 比 mysql 更好,更稳定。
目前两个客户端扩展库连接超时可以设置选项来操作,比如mysqli:
&?php//创建对象$mysqli = mysqli_init();
//设置超时选项$mysqli-&options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
//连接$mysqli-&real_connect('localhost', 'my_user', 'my_password', 'world');
//如果超时或者其他连接失败打印错误信息if (mysqli_connect_errno()) {&&& printf(&Connect failed: %s/n&, mysqli_connect_error());&&& exit();}//成功输出连接信息printf (&Connection: %s/n.&, $mysqli-&host_info);
$mysqli-&close();?&
这个是连接超时,但是有些时候我们需要查询读写超时,比如说我们一个数据库压力很大,或者连接很多,那么数据库查询就很缓慢,但是我希望某些不重要的数据,比如说文章点击数这种如果查询超时了就不显示,至少能够保证主体页面正确显示,但是查遍PHP手册没有发现这个操作选项或者函数。
手册里只有这么四个选项
跟踪 mysqli 的扩展源代码发现它底层调用的是 libmysqlclient 的 mysql_options:
php-5.2.8/ext/mysqli/mysqli_api.c
并且在mysqli的PHP扩展中就只导出了几个变量:
php-5.2.8/ext/mysqli/mysqli.c
大概看了一下 libmysqlclient 的代码,发现其实它自带是有读写超时设置的:
mysql-5.1.30/sql-common/client.c
因为它自己定义了很多操作选项,只是php扩展里没有:
mysql-5.1.30/include/mysql.h
看看mysql中的读写超时是如何实现的:
mysql-5.1.30/sql-common/client.c
读写超时真正操作的地方,超时处理这里重试了两次,还是写死了:
mysql-5.1.30/sql/net_serv.cc
现在基本得出了结论:
现在我们来看看如果我们自己要设置超时,我们自己压入 MYSQL_OPT_READ_TIMEOUT 也是可以达到读写超时效果的,写一段代码来测试一下:
&?php//自己定义读写超时常量if (!defined('MYSQL_OPT_READ_TIMEOUT')) {&&&&&&& define('MYSQL_OPT_READ_TIMEOUT',& 11);}if (!defined('MYSQL_OPT_WRITE_TIMEOUT')) {&&&&&&& define('MYSQL_OPT_WRITE_TIMEOUT', 12);}
//设置超时$mysqli = mysqli_init();$mysqli-&options(MYSQL_OPT_READ_TIMEOUT, 3);$mysqli-&options(MYSQL_OPT_WRITE_TIMEOUT, 1);
//连接数据库$mysqli-&real_connect(&localhost&, &root&, &root&, &test&);if (mysqli_connect_errno()) {&& printf(&Connect failed: %s/n&, mysqli_connect_error());&& exit();}
//执行查询 sleep 1秒不超时printf(&Host information: %s/n&, $mysqli-&host_info);if (!($res=$mysqli-&query('select sleep(1)'))) {&&& echo &query1 error: &. $mysqli-&error .&/n&;} else {&&& echo &Query1: query success/n&;}
//执行查询 sleep 9秒会超时if (!($res=$mysqli-&query('select sleep(9)'))) {&&& echo &query2 error: &. $mysqli-&error .&/n&;} else {&&& echo &Query2: query success/n&;}
$mysqli-&close();echo &close mysql connection/n&;?&
查看上面代码的执行结果,验证了上面的观点,第一个查询成功了,第二个查询连接被断开了:
如果需要修改这个秒级别的超时,比如改成毫秒级别的超时,只能两个地方修改:
1.& 修改客户端,比如 mysqli 的 query 代码,加入定时器,超时则返回
2.& 修改 Mysql 中的vio代码,因为mysql的网络处理底层都是经过vio的操作
MySQL相关的vio代码:
poll 超时:
setsockopt 超时:
基本上到这里就基本能够解决PHP在针对MySQL读写查询操作超时的处理了,希望对你有帮助。
按照上面查看代码来看,目前PHP针对MySQL查询超时以下限制:
1. 超时设置单位为秒,最少配置1秒
2. 但mysql底层的read会重试两次,所以实际会是 3 秒
重试两次 + 自身一次 = 3倍超时时间。
那么就是说最少超时时间是3秒,不会低于这个值,对于大部分应用来说可以接受,但是对于小部分应用需要优化。
(本文来源:)
上一篇: 下一篇:

我要回帖

更多关于 mysql 查询数据表 的文章

 

随机推荐