PHP调用Oracle,mysql,mssql server 储存过程方法

 更新时间:2016年11月25日 16:38  点击:1946

下面总结了三种流行的数据库教程如何利用php教程 来调用它们的存储过程,我们讲有mysql教程,oracle,mssql server哦。

<?php
function check_login($user, $pass) {
         $conn = ocilogon('user', 'pass', 'database');
         $sql = 'begin :result := test.check_login(:user, :pass); end;';
         $stmt = oci_parse($conn, $sql);
        
         $result = '';
         oci_bind_by_name($stmt, ':user', $user, 32);
         oci_bind_by_name($stmt, ':pass', md5($pass), 32);
         oci_bind_by_name($stmt, ':result', $result, 10);
         oci_execute($stmt);
         ocilogoff($conn);
        
         return $result;
}
?>

调用mysql

存储过程改成:
create procedure in_out(in uid int) begin
set @msg='hello';
select *,@msg from manage_loginhistory where h_uid=uid;
end;
php调用改成:
$sql = "call in_out(39)";
$rs=mysql_query($sql);
$row=mysql_fetch_array($rs);

调用ms sql server

$user_name = '龙之泪';      //声明一个变量,用做存储过程的输入参数
   $password = '123456';       //再声明一个变量,用做存储过程的另一个输入参数
   $info = '';                            //$info,用来接受从存储过程输出的参数值
   $host="192.168.0.1";         //定义数据库服务器
   $user="sa";                        //连接用户名
   $password="123456";        //连接密码
   $db="sample";                    //数据库名称
   $dblink=mssql_connect($host,$user,$password) or die("can't connect to mssql"); //连接数据库服务器
   mssql_select_db($db,$dblink)   or die("can't select sample");//选择数据库

   $sp = mssql_init("test");  //初始化一个存储过程

   //为存储过程添加一个参数,@user_name为参数名,$user_name为参数对应的php变量,sqlvarchar表明该参数类型为sql server的varchar类型,第一个false表示该参数不是输出参数,即该参数是输入参数,第二个false表示该参数不允许为null,最后的30表示该变量的长度为30
   mssql_bind($sp,"@user_name",$user_name,sqlvarchar,false,false,30);
   mssql_bind($sp,"@password",$password,sqlvarchar,false,false,30);
   mssql_bind($sp,"@info",$info,sqlvarchar,true,false,30); //为存储过程添加一个输出参数
   mssql_execute($sp); //执行该存储过程

   echo $info; //打印出从存储过程中返回的输出参数值

测验考试libmysql教程拷入 windows/system32下和libmysql.dll拷贝到apache/bin下。
  当然,最省事的方法是:
  在apache中:
  loadfile d:/php教程/php5.2.13/libmysql.dll
  只上边这一行,mysql便可成功挪用。
  我的服务器版本:win7
  apache 2.2.13
  php 5.2.13
  mysql5.1.37
  phpmyadmin3.3.2
  下面是我的apache的部门配备布置。
  phpinidir d:/php/php5.2.13 #不是必须
  loadfile d:/php/php5.2.13/php5ts.dll
  loadfile d:/php/php5.2.13/libmysql.dll
  loadmodule php5_module d:/php/php5.2.13/php5apache2_2.dll
  addtype application/x-httpd-php .php

php教程连接mssql 2005 1.下载以下两个文件,放入php ext目录及system32

php_sqlsrv_52_ts_vc6.dll   (线程安全)

php_sqlsrv_52_nts_vc6.dll (非线程安全)

vc6用于apache,vc9用于iis

2.修改php.ini

extension=php_sqlsrv_52_ts_vc6.dll

3.下载sqlncli.msi,微软官方可以下

安装的时候提示是sql server 2008的,不过2005也是可以用的。

4.测试代码

<?php

$servername = "127.0.0.1";
$connectioninfo = array("database"=>"testdb","uid"=>"test","pwd"=>"test");
$conn = sqlsrv_connect($servername, $connectioninfo);

if($conn) {
    echo "connection established.<br>";
} else {
    echo "connection could not be established.<br>";
    die(print_r(sqlsrv_errors(), true));
    exit();
}

$sql = "select * from t_employee";
$result = sqlsrv_query($conn,$sql);
$data = array();
while($row=sqlsrv_fetch_array($result)) {
    $data[] = $row;
}

foreach($data as $p) {
    echo $p['name']."<br>";
}

sqlsrv_close($conn);

echo "<br> done <br>";
echo date("y-m-d h:i:s");

?>


mysql教程连接类

class db_handle {
    var $classname = "db_handle";
    var $server;
    var $username;
    var $password;
    var $database;
    var $linkid = 0;
    var $queryresult = "";
    var $lastinsertid = "";
    /* private ignore=>ignore the error and continue, halt=>report the error and halt, report=>report the error and continue */
    var $halt_on_error = "report";
    var $error = "";
    var $errno = 0;
    /**public
     * remark: this is the db_mysql_class's structure
     * function: set the server,username,password,database variable.
     */
    function db_handle($server = "", $username = "", $password = "", $database = "") {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;
    }
    /**public
     * function: connect database and select database
     * success: retun 1
     * failed: return 0
     */
    function connect() {
        $this->linkid = @mssql_pconnect ( $this->server, $this->username, $this->password );
        if (! $this->linkid) {
            $this->halt ( "mssql_pconnect($this->server,$this->username,$this->password): failed" );
            return 0;
        }
        if (! @mssql_select_db ( $this->database )) {
            $this->halt ( "mssql_select_db($this->database) failed." );
            return 0;
        }
        return 1;
    }
    /**public
     * function: check the database, if exist then select
     * exist: return 1
     * not exist: return 0
     */
    function selectdatabase() {
        if (@mssql_select_db ( $this->database ))
            return 1;
        else
            return 0;
    }
    /**public
     * function: execute sql instruction
     * success: return sql result.
     * failed: return 0;
     */
    function execquery($sql = "") {
        $this->connect();
        if ($this->linkid == 0) {
            $this->halt ( "execute sql failed: have not valid database connect." );
            return 0;
        }
        ob_start ();
        $this->queryresult = mssql_query ( $sql, $this->linkid );
        $error = ob_get_contents ();
        ob_end_clean ();
        if ($error) {
            $this->halt ( "execute sql: mssql_query($sql,$this->linkid) failed." );
            return 0;
        }
        $reg = "#insert into#";
        if (preg_match ( $reg, $sql )) {
            $sql = "select @@identity as id";
            $res = mssql_query ( $sql, $this->linkid );
            $this->lastinsertid = mssql_result ( $res, 0, id );
        }
        return $this->queryresult;
    }
   
    /**public
     * function: get the query result's row number
     * success: return the row fo the result
     * failed: return 0
     */
    function gettotalrownum($result = "") {
        if ($result != "")
            $this->queryresult = $result;
        $row = @mssql_num_rows ( $this->queryresult );
        if ($row >= 0)
            return $row;
        $this->halt ( "get a row of result failed: result $result is invalid." );
        return 0;
    }
   
    /**public
     * function: get the last insert record's id
     * success: return id
     * failed: return 0
     */
    function lastinsertid() {
        return $this->lastinsertid;
    }
   
    /**public
     * function: get a field's value
     * success: return value of the field
     * failed: return 0
     */
    function getfield($result = "", $row = 0, $field = 0) {
        if ($result != "")
            $this->queryresult = $result;
        $fieldvalue = @mssql_result ( $this->queryresult, $row, $field );
        if ($fieldvalue != "")
            return $fieldvalue;
        $this->halt ( "get field: mssql_result($this->queryresult,$row,$field) failed." );
        return 0;
       
    //here should have error handle
    }
   
    /**public
     * function: get next record
     * success: return a array of the record's value
     * failed: return 0
     */
    function nextrecord($result = "") {
        if ($result != "")
            $this->queryresult = $result;
        $record = @mssql_fetch_array ( $this->queryresult );
        if (is_array ( $record ))
            return $record;
            //$this->halt("get the next record failed: the result $result is invalid.");
        return 0;
    }
   
    /**public
     * function: free the query result
     * success return 1
     * failed: return 0
     */
    function freeresult($result = "") {
        if ($result != "")
            $this->queryresult = $result;
        return @mssql_free_result ( $this->queryresult );
    }
   
    /**public
     * function: set the halt_on_error's state
     * success: return 1
     * failed: return 0
     */
    function sethaltonerror($state = "ignore") {
        if (! ($state == "ignore" || $state == "report" || $state == "halt")) {
            $this->halt ( "set the halt_on_error fail: there is no state value $state" );
            return 0;
        }
        $this->halt_on_error = $state;
        return 1;
    }
   
    /**public
     * function: get the halt_on_error's state
     */
    function gethaltonerror() {
        return $this->halt_on_error;
    }
   
    /**public
     * function: get the class's name
     */
    function tostring() {
        return $this->classname;
    }
   
    /**private
     * function: error handle
     */
    function halt($msg) {
        $this->error = @mysql_error ( $this->linkid );
        $this->errno = @mysql_errno ( $this->linkid );
        if ($this->halt_on_error == "ignore")
            return;
        $this->makemsg ( $msg );
        if ($this->halt_on_error == "halt")
            die ( "session halted" );
    }
   
    /**private
     * function: make error information and print
     */
    function makemsg($msg) {
        printf ( "database error: %sn", $msg );
        printf ( "mysql error: %s (%s)n", $this->errno, $this->error );
    }
}

 

在 windows 下安装 php教程 时, 为了避免配置文件混乱,将安装目录下的 php.ini 复制到 windows 目录下之后,应该将原来安装目录下的 php.ini 文件重命名或删除,以免造成在不同环境下执行时,查找配置文件不一致的情况发生


fatal error: undefined function mysql_connect()
  环境: windows 2003, php 5.2.0, mysql 5.0, apache 2.0
  在 php.ini 中, 已经将 php_mysql.dll 的模块选项给打开了;测试的脚本也很简单,就一个 mysql_conect 函数,内容如下:
复制代码 代码如下:


php.ini:
extension=php_mysql.dll
测试脚本 test.php 内容如下:
text.php
<?
if ( !mysql_connect(dbhost, dbuser,dbpwd) )
{
echo "连接失败!";
exit;
}
echo "连接成功!t";
?>
用 web 方式调用 http://localhost/test.php, 执行正常, 显示"连接成功".
  但用 dos command 命令行的方式调用 d:/php/php.exe test.php 却显示连接失败, 错误信息为: fatal error: undefined function mysql_connect()
  很显然, 在 dos command 命令行的环境下,mysql 的模块没有被调用。方法弄尽, 仍无法解决. 百思不得其解. 后来, 用写了个脚本, 看看 php 的配置, 在两个环境下有什么不同:
test.php
复制代码 代码如下:


<?
echo phpinfo();
?>

仔细查看两个环境下 phpinfo() 输入的 php 配置信息,终于发现了问题所在:
web 方式 http://localhost/test.php 方式调用时, 其 configuration file (php.ini) path 显示为 c:windowsphp.ini。
dos command 命令行方式 d:/php/php.exe test.php 调用时, 其 configuration file (php.ini) path 为 d:phpphp.ini。
  而在 c:windows 和 d:php 目录下, 都存在一个 php.ini 文件,d:php 目录下的 php.ini 没有将 extension=php_mysql.dll 模块打开.于是将 d:phpphp.ini 删除,只保留 c:windowsphp.ini,问题解决.

 

操作时点击删除连接时就会会获取到当前条目的id然后程序获取到当前id进行删除操作。

<?php教程
       include("conn.php");
      
       $query = "select * from new order by id desc";
       $res = mysql教程_query($query);
       while($rows =mysql_fetch_array($res)){       //将查询到结果拆到$rows数组中
?>
<table>
       <tr>
              <td>标题:<?php echo$rows['title']?></td><td><a href="del.php?<?php $tid = $rows['id'] ?>">[删除]</a></td><td><a href="">[修改]</a></td>
       </tr>
<table>
       <?php
              }
       ?>
<form  action="addnews.php" method="post">
       作者:<input type="text" name="author"/><br/><br/>
       标题:<input type="text" name="title" size="20"><br/><br/>
       内容:<textarea name="content" cols="20" rows="20"></textarea>
       <input type="submit" value="提交" name="submit"/>
</form>

del.php代码

<?php
       $del = "delect from test where id in ($tid)";
       $res  = mysql_query($del);
       if($res){
              echo "删除成功";
       }else{
              echo "删除失败";
       }
?>

[!--infotagslink--]

相关文章

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

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • Spring AOP 对象内部方法间的嵌套调用方式

    这篇文章主要介绍了Spring AOP 对象内部方法间的嵌套调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-29
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • php抓取网站图片并保存的实现方法

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

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • c# 三种方法调用WebService接口

    这篇文章主要介绍了c# 三种方法调用WebService接口的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-07
  • 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
  • js基础知识(公有方法、私有方法、特权方法)

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

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

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

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25