當前位置:首頁 » 存儲配置 » phpsqlserver存儲過程

phpsqlserver存儲過程

發布時間: 2022-05-07 10:20:05

php查詢sqlserver的存儲過程,資料庫有兩條結果集,程序中列印就只有一條

資料庫有幾條是一回事,你查詢的結果是幾條?然後傳給列印的數據是幾條,這些都要調

❷ PHP SQL Server 存儲過程調用基礎問題

http://www.jb51.net/article/32097.htm
你現在的報錯是提示什麼呢,上面的代碼是沒有問題的。
能提供下錯誤信息嗎,或者其他異常執行結果。

---
代碼部分
1、把最上面的資料庫連接可以單獨寫一個 .php ,對應的釋放資料庫也寫單獨寫一個 .php頁面 供其他頁面直接調用,不需要每次都是去連
2、建議嘗試下面向對象寫法,

❸ php5.3.16通過sqlsrv模塊調用sqlserver 2008的存儲過程

M後面怎麼會有括弧呢 ? -〉操作符之前引用的應該是變數名也就是內存地址指針變數

❹ 為什麼要使用存儲過程

存儲過程是指一組具有某種特殊功能的SQL語句集,常用於大型資料庫中,也出現於開發過程中。程序員經常運用存儲過程是由於其具有以下優點:

一、響應時間上來說有優勢:如果你在前台處理的話。可能會涉及到多次資料庫連接。但如果你用存儲過程的話,就只有一次。存儲過程可以給我們帶來運行效率提高的好處。

二、安全上使用了存儲過程的系統更加穩定:程序容易出現 BUG 不穩定,而存儲過程,只要資料庫不出現問題,基本上是不會出現什麼問題的。

(4)phpsqlserver存儲過程擴展閱讀

存儲過程不僅僅適用於大型項目,對於中小型項目,使用存儲過程也是非常有必要的。

一般來說,存儲過程的編寫比基本SQL語句復雜,編寫存儲過程需要更高的技能,更豐富的經驗。經自已測試,一個有著十萬條記錄的表,通過php調用存儲過程比通過PHP執行sql語句獲取所有記錄的時間,平均快0.4秒左右。

❺ PHP得到mssql的存儲過程的輸出參數功能實現

在開發過程中可能會遇到無法取得MSSQL存儲過程的輸出參數,很多朋友都不知道該怎麼辦,本文將詳細介紹PHP得到mssql的存儲過程的輸出參數功能實現,需要了解的朋友可以參考下
復制代碼
代碼如下:
<?
$conn=mssql_connect("127.0.0.1","user","passwd");
mssql_select_db("mydb");
$stmt=mssql_init("pr_name",$conn);//
$a=50001;
mssql_bind($stmt,"RETVAL",$val,SQLVARCHAR);
//用於直接返回return
-103此類的值。
mssql_bind($stmt,"@outvar",$b,SQLVARCHAR,true);//用於返回在存儲過程中定義的輸出參數
mssql_bind($stmt,"@invar",$a,SQLINT4);
$result
=
mssql_execute($stmt,true);//不能返回結果集,只能得到輸出參數
//$result
=
mssql_execute($stmt,false);
//返回結果集
//$records=mssql_fetch_array($result);
//print_r($records);
//mssql_next_result($result);下一個結果集,當等於FALSE的時候下一個就是輸出參數
echo
$b;
echo
$val;
?>
下面這些是從別的地方看到的。
小麻煩:
我們按照慣例使用了一個MS
Sql
Server的存儲過程procA,它給出了一個輸出參數nReturn,
而且返回了一個結果集。
在如何讓PHP調用這個procA的時候,我們遭遇了一點小麻煩。
魚肉和熊掌不可兼得:
我們本來希望這樣的代碼能夠既得到輸出參數,又得到返回的結果集:
復制代碼
代碼如下:
//
初始化要傳進存儲過程的參數們:
$nYear
=
2004;
$nPageSize
=
20;
$nPageNo
=
1;
//
Initializes
a
stored
procere:
$stmt
=
mssql_init("proc_stat_page",
$db_mssql->Link_ID);
//
綁定輸入參數:
mssql_bind($stmt,
"@nReturn",
$nReturn,
SQLINT4,
TRUE);
mssql_bind($stmt,
"@nYear",
$nYear,
SQLINT4);
mssql_bind($stmt,
"@nPageSize",
$nPageSize,
SQLINT4);
mssql_bind($stmt,
"@nPageNo",
$nPageNo,
SQLINT4);
//
執行存儲過程,得到QueryID:
$db_mssql->Query_ID
=
mssql_execute($stmt,false);
雖然得到了結果集,但是,這樣$nReturn參數是拿不到輸出參數的。
如果把最後一句話改為:
$db_mssql->Query_ID
=
mssql_execute($stmt,true);
輸出參數倒是拿到了,結果集又沒有了。
好像是一個魚肉和熊掌不可兼得的樣子。
難道PHP連這個都做不到?PHP手冊中也沒有講這個問題。
來自於PHP維護者的解釋:
原本我們這種調用辦法是PHP
4.3版本之前肯定是支持的。
「但是,自從PHP
4.3版本之後,」他們說,「為了能夠兼容存儲過程返回多個結果集,PHP改變這個特性。」
「如果你不需要結果集,你應該設置mssql_execute的第二個可選參數為TRUE,這樣mssql_execute方法之後你就可以得到輸出參數了。」
「如果你需要返回的結果集們,你應該為每一個結果集調用一次mssql_next_result。在最後一個結果集返回之後,你再調用mssql_next_result就會得到返回值FALSE,這時候,你就可以訪問輸出參數了。」
解決:
在最後我們補上一句話:
//
After
the
last
result
has
been
returned
the
return
value
will
have
the
value
returned
by
the
stored
procere.
mssql_next_result($db_mssql->Query_ID);
立刻,魔法生效了:
PHP填充了正確的輸出參數到$nRetVal里。

❻ PHP怎樣調用MSSQL的存儲過程

下面的例子代碼, 僅僅用於演示 in out , 沒有任何資料庫檢索的處理。
註:Oracle 的 IN OUT 寫在變數名後面。SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 ( 2 p_user_name IN VARCHAR2, 3 p_out_val OUT VARCHAR2, 4 p_inout_val IN OUT VARCHAR2 5 ) AS 6 BEGIN 7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!'); 8 p_out_val := 'A'; 9 p_inout_val := 'B'; 10 END HelloWorld2; 11 /Procere created.SQL> DECLARE 2 p_outval VARCHAR2(10); 3 p_inoutval VARCHAR2(10) := '~Hi~'; 4 BEGIN 5 HelloWorld2('Edward', p_outval, p_inoutval); 6 7 dbms_output.put_line('p_outval=' || p_outval); 8 dbms_output.put_line('p_inoutval=' || p_inoutval); 9 END; 10 /Hello Edward~Hi~!p_outval=Ap_inoutval=BPL/SQL procere successfully completed.SQL>

❼ SQL SERVER 中存儲過程和函數的區別

一、多數指令是相同的,包括創建和修正存儲過程的指令。二、很多細微的指令有不同,具體如下(不僅):1mysql支持enum,和set類型,sqlserver不支持2mysql不支持nchar,nvarchar,ntext類型3mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)MYSQL:createtablebasic(idintkeyauto_increment,namevarchar(20));MSSQL:createtablebasic(idintidentity(1,1),namevarchar(20))4msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的5mysql需要為表指定存儲類型6mssql識別符是[],[type]表示他區別於關鍵字(可選用來包含表名、欄位名),但是mysql卻是`(重音符,也就是按鍵1左邊的那個符號)7mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是now()函數8mssql不支持replaceinto語句,但是在最新的sql20008裡面,也支持merge語法9mysql支持insertintotable1sett1=『』,t2=『』,但是mssql不支持這樣寫10mysql插入多行支持這樣寫insertintotabl1values(1,1),(1,1),(1,1),(1,1),(1,1),(1,1),(1,1)MSSQL不支持11mssql不支持limit語句,是非常遺憾的,只能用top取代limt0,N,row_number()over()函數取代limitN,M12mysql在創建表時要為每個表指定一個存儲引擎類型,而mssql只支持一種存儲引擎13mysql不支持默認值為當前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型14mssql裡面檢查是否有這個表再刪除,需要這樣:ifexists(select*fromdbo.sysobjectswhereid=object_id(N'uc_newpm')andOBJECTPROPERTY(id,N'IsUserTable')=1)但是在mysql裡面只需要DROPTABLEIFEXISTScdb_forums;15mysql支持無符號型的整數,那麼比不支持無符號型的mssql就能多出一倍的最大數存儲16mysql不支持在mssql裡面使用非常方便的varchar(max)類型,這個類型在mssql裡面既可做一般數據存儲,也可以做blob數據存儲17mysql創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEYdisplayorder(fid,displayorder)在mssql裡面必須要:_uc_protectedmembers_username_appidondbo.uc_protectedmembers(usernameasc,appidasc)18mysqltext欄位類型不允許有默認值19mysql的一個表的總共欄位長度不超過65XXX。20一個很表面的區別就是mysql的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是..21mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用方便,這是mysql很大的一個缺點。22mysql的存儲過程只是出現在最新的版本中,穩定性和性能可能不如mssql。23同樣的負載壓力,mysql要消耗更少的CPU和內存,mssql的確是很耗資源。24php連接mysql和mssql的方式都差不多,只需要將函數的mysql替換成mssql即可。25mysql支持date,time,year類型,mssql到2008才支持date和time。26變數賦值MYsql:變數賦值SELECT@min_price:=MIN(price),@max_price:=MAX(price)FROMshopMSsql:變數賦值SELECT@min_price=MIN(price),@max_price=MAX(price)FROMshop三、總的來說,如果是簡單的存儲過程代碼,要修改,不會太難。如果是復雜的系統,要移植會很難很難。

❽ php sql怎麼執行存儲過程

php相當於執行mysql的終端,即模擬mysql的客戶端,所以符號sql標準的語句都是可以執行的。
存儲是由資料庫本身建立起來的,與php沒有關系,
具體查看mysql的命令
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body

❾ SQL Server 存儲過程的幾種常見寫法分析

一、多數指令是相同的,包括創建和修正存儲過程的指令。
二、很多細微的指令有不同,具體如下(不僅):
1 mysql支持enum,和set類型,sql server不支持
2 mysql不支持nchar,nvarchar,ntext類型
3 mysql的遞增語句是AUTO_INCREMENT,而mssql是identity(1,1)
MYSQL:create table basic(id int key auto_increment,name varchar(20));
MSSQL: create table basic(id int identity(1,1) , name varchar(20))
4 msms默認到處表創建語句的默認值表示是((0)),而在mysql裡面是不允許帶兩括弧的
5 mysql需要為表指定存儲類型
6 mssql識別符是[],[type]表示他區別於關鍵字(可選用來包含表名、欄位名),但是mysql卻是 `(重音符,也就是按鍵1左邊的那個符號)
7 mssql支持getdate()方法獲取當前時間日期,但是mysql裡面可以分日期類型和時間類型,獲取當前日期是cur_date(),當前完整時間是 now()函數
8 mssql不支持replace into 語句,但是在最新的sql20008裡面,也支持merge語法
9 mysql支持insert into table1 set t1 = 『』, t2 = 『』 ,但是mssql不支持這樣寫
10 mysql插入多行支持這樣寫 insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1) MSSQL不支持
11 mssql不支持limit語句,是非常遺憾的,只能用top 取代limt 0,N,row_number() over()函數取代limit N,M
12 mysql在創建表時要為每個表指定一個存儲引擎類型,而mssql只支持一種存儲引擎
13 mysql不支持默認值為當前時間的datetime類型(mssql很容易做到),在mysql裡面是用timestamp類型
14 mssql裡面檢查是否有這個表再刪除,需要這樣:
if
exists (select * from dbo.sysobjects where id =
object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable')
= 1)
但是在mysql裡面只需要 DROP TABLE IF EXISTS cdb_forums;
15 mysql支持無符號型的整數,那麼比不支持無符號型的mssql就能多出一倍的最大數存儲
16 mysql不支持在mssql裡面使用非常方便的varchar(max)類型,這個類型在mssql裡面既可做一般數據存儲,也可以做blob數據存儲
17
mysql創建非聚集索引只需要在創建表的時候指定為key就行,比如:KEY displayorder (fid,displayorder)
在mssql裡面必須要:create unique nonclustered index
index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
18 mysql text欄位類型不允許有默認值
19mysql的一個表的總共欄位長度不超過65XXX。
20一個很表面的區別就是mysql的安裝特別簡單,而且文件大小才110M(非安裝版),相比微軟這個龐然大物,安裝進度來說簡直就是.....
21mysql的管理工具有幾個比較好的,mysql_front,和官方那個套件,不過都沒有SSMS的使用方便,這是mysql很大的一個缺點。
22mysql的存儲過程只是出現在最新的版本中,穩定性和性能可能不如mssql。
23 同樣的負載壓力,mysql要消耗更少的CPU和內存,mssql的確是很耗資源。
24php連接mysql和mssql的方式都差不多,只需要將函數的mysql替換成mssql即可。
25mysql支持date,time,year類型,mssql到2008才支持date和time。
26變數賦值
MYsql:變數賦值SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop
MSsql:變數賦值SELECT @min_price=MIN(price),@max_price=MAX(price) FROM shop

三、總的來說,如果是簡單的存儲過程代碼,要修改,不會太難。如果是復雜的系統,要移植會很難很難。

熱點內容
matlab編譯工具箱 發布:2024-11-17 08:22:44 瀏覽:31
eda編譯和綜合區別 發布:2024-11-17 08:12:30 瀏覽:994
ftp伺服器前端怎麼用 發布:2024-11-17 08:12:30 瀏覽:67
基金怎麼配置才合適 發布:2024-11-17 07:59:53 瀏覽:787
linux下編譯cpp 發布:2024-11-17 07:59:18 瀏覽:645
javaweb資料庫 發布:2024-11-17 07:59:18 瀏覽:910
hadoop在win10上編譯 發布:2024-11-17 07:47:35 瀏覽:292
c安全編程 發布:2024-11-17 07:44:05 瀏覽:817
演算法上中位 發布:2024-11-17 07:39:05 瀏覽:979
空調壓縮機哪種好 發布:2024-11-17 07:36:50 瀏覽:756