通过PHP连接MYSQL的两种方法

 更新时间:2016年11月25日 16:43  点击:1779
  mysql可通过两种方式通过PHP与web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数
相关函数如下:
MYSQL函数
mysql_affected_rows: 得到 MySQL 最后操作影响的列数目。
 
mysql_close: 关闭 MySQL 伺服器连线。
 
mysql_connect: 开启 MySQL 伺服器连线。
 
mysql_create_db: 建立一个 MySQL 新资料库。
 
mysql_data_seek: 移动内部传回指标。
 
mysql_db_query: 送查询字串 (query) 到 MySQL 资料库。
 
mysql_drop_db: 移除资料库。
 
mysql_errno: 传回错误讯息代码。
 
mysql_error: 传回错误讯息。
 
mysql_fetch_array: 传回阵列资料。
 
mysql_fetch_field: 取得栏位资讯。
 
mysql_fetch_lengths: 传回单列各栏资料最大长度。
 
mysql_fetch_object: 传回物件资料。
 
mysql_fetch_row: 传回单列的各栏位。
 
mysql_field_name: 传回指定栏位的名称。
 
mysql_field_seek: 设定指标到传回值的某栏位。
 
mysql_field_table: 获得目前栏位的资料表 (table) 名称。
 
mysql_field_type: 获得目前栏位的型态。
 
mysql_field_flags: 获得目前栏位的旗标。
 
mysql_field_len: 获得目前栏位的长度。
 
mysql_free_result: 释放传回占用记忆体。
 
mysql_insert_id: 传回最后一次使用 INSERT 指令的 ID。
 
mysql_list_fields: 列出指定资料表的栏位 (field)。
 
mysql_list_dbs: 列出 MySQL 伺服器可用的资料库 (database)。
 
mysql_list_tables: 列出指定资料库的资料表 (table)。
 
mysql_num_fields: 取得传回栏位的数目。
 
mysql_num_rows: 取得传回列的数目。
 
mysql_pconnect: 开启 MySQL 伺服器长期连线。
 
mysql_query: 送出一个 query 字串。
 
mysql_result: 取得查询 (query) 的结果。
 
mysql_select_db: 选择一个资料库。
 
mysql_tablename: 取得资料表名称。
 

ODBC函数
使用ODBC函数需安装MYSQL ODBC
odbc_autocommit: 开关自动更动功能。
PHP在Linux/Unix下连接oracle8是很容易的事,但在windows平台下实在不易,本人经过长久的摸索才找到可靠的方法,不敢独享,
现公布出来以飨大家。
笔者使用的开发环境:
windows 98 第二版
php4.04pl1
apache 1.3.14 window版
oracle 8.05客户端
PHP以CGI方式安装完毕测试成功后。以以下代码测试
<?php
$conn = OCILogon("cinmsiii","cinmsiii","(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.202)(PORT = 1521))(CONNECT_DATA = (SID = unicom)))");
//$conn=OCILogon("cinmsiii","cinmsiii","cinms");如果oracle客户端是8.1.6i的话可以这样用,参数照上
if($conn!=false)
{
echo "ok";
OCILogoff($conn);
}
else
echo "false";
?>
关于连接参数问题:
连接串设为以下:
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.202)(PORT = 1521))(CONNECT_DATA = (SID = unicom)))
PROTOCOL:为使用的网络协议
HOST:为数据库服务器主机名
SID:为数据库的实例号
这样作后一般没有任何问题。
如果你的oracle 8客户端为 8.1.6i企业版,可以把这些参数设在连接串中,用 oracle8的net easy config实用工具设置。
将设置后的连接串名称作为连接串传入。
推测oracle 7.x也可以用此方法,因没有环境,未作测试,如果你有兴趣可以试试。

mysql让存储结果分页,用于复杂查询。

似乎讨论分页的人很少,难道大家都沉迷于limit m,n?
在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时,
where somthing order by somefield+somefield
mysql会搜遍数据库,找出“所有”符合条件的记录,然后取出m,n条记录。
如果你的数据量有几十万条,用户又搜索一些很通俗的词,
然后要依次读最后几页重温旧梦。。。mysql该很悲壮的不停操作硬盘。

所以,可以试着让mysql也存储分页,当然要程序配合。
(这里只是提出一个设想,欢迎大家一起讨论)

ASP的分页:在ASP系统中有Recordset对象来实现分页,但是大量数据放在内存中,而且不知道什么时候才失效(请ASP高手指点).
SQL数据库分页:用存储过程+游标方式分页,具体实现原理不是很清楚,设想如果用一次查询就得到需要的结果,或者是id集,需要后续页时只要按照结果中的IDs读出相关记录。这样只要很小的空间保留本次查询的所有IDs. (SQL中的查询结果不知道怎样清楚过期垃圾?)

这样,可以让mysql模拟存储分页机制:
1. select id from $table where $condition order by $field limit $max_pages*$count;
     查询符合条件的IDs.
     限定最大符合条件的记录数量,也可以不加。
2. 因为php在执行结束后所有变量都要lost,所以可以考虑:
     方案a. 在mysql建立临时表,查询结果用一个时间或随机数作为唯一标志插入。
      其中建立page1~pagen个字段,每个字段保存该页中需要的ids, 这样一个id对一条记录.
     方案b. 如果打开session,也可以放在session中保存,实际上是放在文件中保存。
         建立一个$IDs数组,$IDs[1]~$IDs[$max_pages]. 考虑到有时候用户会开几个
         窗口同时查询,要为$ids做一个唯一标志,避免查询结果相互覆盖。二维数组
         和$$var都是好办法。
3. 在每页页的请求中,直接找到对应的IDs,中间以","间隔:
      select * from $table where id in ($ids); 速度绝对快
目的: 一台Redhat linux 6.2 用为防火墙,专线连结Chinanet,对内连结
    局域网段192.168.11.0/24,需要enable PHP4和Mysql数据库,且局域网
        上有另一台Apache服务器192.168.11.2,需要对外部用户提供服务,利用
        防火墙上编译的Apache反向代理和名字虚拟主机的功能来实现
地址: 防火墙外部地址为a.b.c.210,且别名第二个地址为a.b.c.211,内部网卡
        地址为192.168.11.5,内部LAN上的Apache服务器为192.168.11.2
实现:
1.下载三个源文件到防火墙机器的/tmp下
apache_1.3.12.tar.gz
mysql-3.22.32.tar.gz    
php-4.0.1pl2.tar.gz
2. 在/tmp下分别解开三个文件
# tar xvfz apache*gz
# tar xvfz mysql*gz
# tar xvfz php*gz
3. 进入/tmp/mysql*,编译mysql
#./configure --prefix=/usr/local/mysql
#make
#make install
#scripts/mysql_install_db
#/usr/local/mysql/bin/safe_mysqld &
#/usr/local/mysql/bin/mysqladm -u root password newpassword
4. 进入/tmp/php*,编译PHP4
#./configure --with-mysql --with-apache=../apche_1.3.12
        --enable-track-vars
#make;make install
5. 下载反向代理X-forward-for模块,地址是
http://perl.apache.org/guide/download.html#mod_proxy_add_forward
下载后放该文件mod_proxy_add_forward.c到/tmp/apache_1.3.12/src/modules/
extra/目录下
5.编译Apache,加入PHP4模块 和大多数共享模块库
./configure --prefix=/usr/local/apache
--activate-module=src/modules/php4/libphp4.a
--activate-module=src/modules/extra/mod_proxy_add_forward.c
--enable-module=most --enable-shared=max
6. 拷贝php.ini-dist到其它目录
# cd /tmp/php*
# cp php.ini-dist /usr/local/lib/php.ini
7.编辑/usr/local/apache/conf/httpd.conf中的AddType行
AddType application/x-httpd-php4 .php
8. 编辑/usr/local/apache/conf/httpd.conf中的AddModule行,
Q. How can I restrict access to my SQL Server so that it only allows certain machines to connect?
(v1.0 19.10.1998)
怎样才能限制我的SQL Server只能让指定的机器连接
A. SQL Server has no built-in tools/facilities to do this. It also does not have the facility to run a stored-procedure on connection that could be written/used to do this. Therefore you have the following choices :-
     SQL Server没有这样的功能,也没有提供在连接时执行某一特定过程的功能。这里介绍几种实现的方法
1. Put the SQL Server behind a firewall and use that to restrict access. This is the most secure and functional way to do what you want.
    使用防火墙,它提供了安全和你想用的工具。
2. Write your own ODS Gateway and point the clients at that instead of the SQL Server - the ODS Gateway will then do the checking. However, there is nothing stopping clients figuring out the correct SQL client-config entries to point straight at the SQL Server. There are examples of ODS code in the SQL Programmers Toolkit - available for free download from the MS website.
    写自己的ODS网关代替SQL Server的客户端 - 在ODS网关中检查。不过,这并不能停止正常的客户端连接SQL Server。在SQL Programmers Toolkit中有一个这样的例, 可以从微软站点免费下载。
3. Write a constantly running/scheduled stored-procedure that checks the relevant column in sysprocesses (net_address), and then issues a KILL command for any processes that should not be running. Note that this only works for MAC addresses. This way allows people to connect and possibly make changes before they are spotted and killed.
    写一个存储过程检查sysprocesses中的相应列(net_address)
 

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13