改写网络现有的Mysqli类.进行copy改写,比较笨拙的方法,如下:设置6个记录集,可以按要求设置最大的,我的需求,一个存储过程有6个就够了,极限值,扩展性不好,属于烂代码,希望有高手进行改装一下:主要function在此 public function call_sp_ext($query){ $this->mysqli->multi_query($query); $i = 0 ;
do { //////////////////////第0个记录集. 默认//////////////////////// if ($i==0) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row[$this->count++] = $row; } $result->close(); } }
//////////////////////第1个记录集. 假设有的话//////////////////////// if ($i==1) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row1[$this->count1++] = $row; } $result->close(); } }
//////////////////////第2个记录集. 假设有的话//////////////////////// if ($i==2) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row2[$this->count2++] = $row; } $result->close(); } } //////////////////////第3个记录集. 假设有的话//////////////////////// if ($i==3) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row3[$this->count3++] = $row; } $result->close(); } } //////////////////////第4个记录集. 假设有的话//////////////////////// if ($i==4) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row4[$this->count4++] = $row; } $result->close(); } } //////////////////////第5个记录集. 假设有的话//////////////////////// if ($i==5) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row5[$this->count5++] = $row; } $result->close(); } } //////////////////////最大设置有6个记录集供使用//////////////////////// $i = $i + 1; } while($this->mysqli->next_result()); $this->affected_row_sp = $this->mysqli->affected_rows; }
原始类: <?php define ('MY_HOST','localhost'); define ('MY_USER','root'); define ('MY_PASS',''); define ('MY_DB','develop'); define ('MY_PORT','3306'); //For linux add this field define ('MY_SOCKET','/tmp/mysql_sock'); class Model_MysqliExt{ private $mysqli; private $row,$row1,$row2,$row3,$row4,$row5; private $count,$count1,$count2,$count3,$count4,$count5; private $affected_row_sql; private $affected_row_sp; public function Model_MysqliExt(){ //Check system is nt or linux if (PHP_OS == 'WINNT'){ $this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT); }else { $this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT,MY_SOCKET); } if (mysqli_connect_errno()){ die("Connect failed:".mysqli_connect_error()); } $this->row = null; $this->count = 0; $this->count1 = 0; $this->count2 = 0; $this->count3 = 0; $this->count4 = 0; $this->count5 = 0; } //Query sql text public function call_sql($sql){ $this->mysqli->query($sql); $this->affected_row_sql = $this->mysqli->affected_rows; } //Query store procedure text public function ExecuteNoReturnValue($sp_name,$sp_array) { $sp_parameters = ""; for($i=1;$i<=count($sp_array);$i++) { $sp_parameters .= "'".$sp_array[$i]."',";
} $sp_parameters = substr($sp_parameters,0,strlen($sp_parameters)-1); $sp_sql = " call ".$sp_name." (". $sp_parameters.");"; // echo $sp_sql; $this->mysqli->query($sp_sql); } ////////////////////////////////// public function call_sp($query){ $this->mysqli->multi_query($query); do { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row[$this->count++] = $row; } $result->close(); } } while($this->mysqli->next_result()); $this->affected_row_sp = $this->mysqli->affected_rows; }
public function call_sp_ext($query){ $this->mysqli->multi_query($query); $i = 0 ;
do { //////////////////////第0个记录集. 默认//////////////////////// if ($i==0) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row[$this->count++] = $row; } $result->close(); } }
//////////////////////第1个记录集. 假设有的话//////////////////////// if ($i==1) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row1[$this->count1++] = $row; } $result->close(); } }
//////////////////////第2个记录集. 假设有的话//////////////////////// if ($i==2) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row2[$this->count2++] = $row; } $result->close(); } } //////////////////////第3个记录集. 假设有的话//////////////////////// if ($i==3) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row3[$this->count3++] = $row; } $result->close(); } } //////////////////////第4个记录集. 假设有的话//////////////////////// if ($i==4) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row4[$this->count4++] = $row; } $result->close(); } } //////////////////////第5个记录集. 假设有的话//////////////////////// if ($i==5) { if ($result = $this->mysqli->use_result()){ while ($row = $result->fetch_row()){ $this->row5[$this->count5++] = $row; } $result->close(); } } //////////////////////最大设置有6个记录集供使用//////////////////////// $i = $i + 1; } while($this->mysqli->next_result()); $this->affected_row_sp = $this->mysqli->affected_rows; } //Close connection and free memory public function close_sp(){ $this->mysqli->close(); } //Get query result public function get_rows(){ return $this->row; } ////////////////////// public function get_rows1(){ return $this->row1; } ////////////////////// public function get_rows2(){ return $this->row2; } ////////////////////// public function get_rows3(){ return $this->row3; } //////////////////// public function get_rows4(){ return $this->row4; } public function get_rows5(){ return $this->row5; } //Get rows count public function get_count(){ return $this->count; } //Get affected rows public function get_affected_rows($str){ switch ($str){ //Get affected rows from sql text case 'sql': return $this->affected_row_sql; break; //Get affected rows from store procedure text case 'sp': return $this->affected_row_sp; break; default: return false; break; } } } ?>调用方法 <?php //////////////////////////////////////////////////////////////////////////////////////////////////////////////////FLEA::loadClass('Controller_Base');class Controller_TestMultiQuery extends Controller_Base { /** * 构造函数 * * @return Controller_Default */ function Controller_TestMultiQuery() { parent::Controller_Base();
select * from b;
行不?
http://www.kingofcoders.com
public function call_sp_ext($query){
$this->mysqli->multi_query($query);
$i = 0 ;
do {
//////////////////////第0个记录集. 默认////////////////////////
if ($i==0)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row[$this->count++] = $row;
}
$result->close();
}
}
//////////////////////第1个记录集. 假设有的话////////////////////////
if ($i==1)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row1[$this->count1++] = $row;
}
$result->close();
}
}
//////////////////////第2个记录集. 假设有的话////////////////////////
if ($i==2)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row2[$this->count2++] = $row;
}
$result->close();
}
}
//////////////////////第3个记录集. 假设有的话////////////////////////
if ($i==3)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row3[$this->count3++] = $row;
}
$result->close();
}
}
//////////////////////第4个记录集. 假设有的话////////////////////////
if ($i==4)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row4[$this->count4++] = $row;
}
$result->close();
}
}
//////////////////////第5个记录集. 假设有的话////////////////////////
if ($i==5)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row5[$this->count5++] = $row;
}
$result->close();
}
}
//////////////////////最大设置有6个记录集供使用////////////////////////
$i = $i + 1;
} while($this->mysqli->next_result());
$this->affected_row_sp = $this->mysqli->affected_rows; }
<?php
define ('MY_HOST','localhost');
define ('MY_USER','root');
define ('MY_PASS','');
define ('MY_DB','develop');
define ('MY_PORT','3306');
//For linux add this field
define ('MY_SOCKET','/tmp/mysql_sock');
class Model_MysqliExt{ private $mysqli;
private $row,$row1,$row2,$row3,$row4,$row5;
private $count,$count1,$count2,$count3,$count4,$count5;
private $affected_row_sql;
private $affected_row_sp; public function Model_MysqliExt(){
//Check system is nt or linux
if (PHP_OS == 'WINNT'){
$this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT);
}else
{
$this->mysqli = new mysqli(MY_HOST, MY_USER, MY_PASS, MY_DB, MY_PORT,MY_SOCKET);
}
if (mysqli_connect_errno()){
die("Connect failed:".mysqli_connect_error());
}
$this->row = null;
$this->count = 0;
$this->count1 = 0;
$this->count2 = 0;
$this->count3 = 0;
$this->count4 = 0;
$this->count5 = 0; }
//Query sql text public function call_sql($sql){
$this->mysqli->query($sql);
$this->affected_row_sql = $this->mysqli->affected_rows; }
//Query store procedure text
public function ExecuteNoReturnValue($sp_name,$sp_array) {
$sp_parameters = "";
for($i=1;$i<=count($sp_array);$i++)
{
$sp_parameters .= "'".$sp_array[$i]."',";
}
$sp_parameters = substr($sp_parameters,0,strlen($sp_parameters)-1); $sp_sql = " call ".$sp_name." (". $sp_parameters.");";
// echo $sp_sql;
$this->mysqli->query($sp_sql); }
//////////////////////////////////
public function call_sp($query){
$this->mysqli->multi_query($query);
do {
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row[$this->count++] = $row;
}
$result->close();
}
} while($this->mysqli->next_result());
$this->affected_row_sp = $this->mysqli->affected_rows; }
public function call_sp_ext($query){
$this->mysqli->multi_query($query);
$i = 0 ;
do {
//////////////////////第0个记录集. 默认////////////////////////
if ($i==0)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row[$this->count++] = $row;
}
$result->close();
}
}
//////////////////////第1个记录集. 假设有的话////////////////////////
if ($i==1)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row1[$this->count1++] = $row;
}
$result->close();
}
}
//////////////////////第2个记录集. 假设有的话////////////////////////
if ($i==2)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row2[$this->count2++] = $row;
}
$result->close();
}
}
//////////////////////第3个记录集. 假设有的话////////////////////////
if ($i==3)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row3[$this->count3++] = $row;
}
$result->close();
}
}
//////////////////////第4个记录集. 假设有的话////////////////////////
if ($i==4)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row4[$this->count4++] = $row;
}
$result->close();
}
}
//////////////////////第5个记录集. 假设有的话////////////////////////
if ($i==5)
{
if ($result = $this->mysqli->use_result()){
while ($row = $result->fetch_row()){
$this->row5[$this->count5++] = $row;
}
$result->close();
}
}
//////////////////////最大设置有6个记录集供使用////////////////////////
$i = $i + 1;
} while($this->mysqli->next_result());
$this->affected_row_sp = $this->mysqli->affected_rows; }
//Close connection and free memory public function close_sp(){
$this->mysqli->close();
}
//Get query result public function get_rows(){
return $this->row;
}
//////////////////////
public function get_rows1(){
return $this->row1;
}
//////////////////////
public function get_rows2(){
return $this->row2;
}
//////////////////////
public function get_rows3(){
return $this->row3;
}
////////////////////
public function get_rows4(){
return $this->row4;
}
public function get_rows5(){
return $this->row5;
}
//Get rows count public function get_count(){
return $this->count;
}
//Get affected rows public function get_affected_rows($str){
switch ($str){
//Get affected rows from sql text case 'sql':
return $this->affected_row_sql;
break;
//Get affected rows from store procedure text case 'sp':
return $this->affected_row_sp;
break;
default:
return false;
break;
}
}
}
?>调用方法
<?php
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////FLEA::loadClass('Controller_Base');class Controller_TestMultiQuery extends Controller_Base
{
/**
* 构造函数
*
* @return Controller_Default
*/
function Controller_TestMultiQuery() {
parent::Controller_Base();
} /**
* 程序入口的首页
*
* @return null
*/
function actionIndex()
{
FLEA::loadClass('Model_MysqliExt');
$mysqli=&new Model_MysqliExt();
$query = 'call sp_test();';
$mysqli->call_sp_ext($query);
$mysqli->close_sp();
print '<pre>';
print_r($mysqli->get_rows());
print '</pre>'; echo "--------------------<br>";
print '<pre>';
print_r($mysqli->get_rows1());
print '</pre>';
echo "--------------------<br>";
print '<pre>';
print_r($mysqli->get_rows2());
print '</pre>';
}
}
?>这里是使用fleaphp开源框架的方式调用的,有需要地大家可以自行改成一般的就可以了