php參數sql
⑴ php分頁查詢的sql語句第一個參數給數字就正常,給運算就報錯,為什麼
SQL語句不支持這種運算,你可以將運算代碼放到一個變數,SQL語句裡面引用變數,或者" . (1 * 8) . "
⑵ 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 傳值sql語句急急急!!!
<?php
$rs=mysql_query("selectcontentfrom".$_GET["table"]."whereid='".$_GET["id"]."'");
?>
//GET方式的url傳值
//url.php?id=1&table=mytab
//這樣的寫法是有注入漏洞的,不建議這樣弄,GET,POST數據必須過濾才能入庫
⑷ 怎樣用PHP連接sql資料庫
1、學習的方法,最好是看手冊
在前一篇文章中涉及到了連接資料庫sqlsrv_connect();還記得我們mysql連接資料庫的時候也是mysql_connect();兩者操作資料庫是很相似的。從零基礎開始學起的話,只能是查閱手冊。查看一下sqlsrv有哪些函數提供我們使用!推薦網址是:
【注意】很多的方法都跟mysql提供的方法很相似,看到後面的函數名就大概知道裡面的用法,比如說mysql執行sql語句的時候調用mysql_query();而sqlserver執行sql語句的時候調用也是sqlsrv_query(),但是特別注意一點就是,它們的傳遞參數不一樣。詳細的只能看一下手冊。接下來我簡單總結一下操作數據的方法
2、連接資料庫sqlsrv_connect()
<?php$serverName = "serverNamesqlexpress";//伺服器的名字,本地localhost$connectionInfo = array( "Database"=>"dbName", "UID"=>"userName", "PWD"=>"password");$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));
}
3、操作資料庫
1)執行sql語句sqlsrv_query(),返回值為true或者false,這里函數的用法跟mysql_query(),不一樣。它需要把連接的資源句柄當作參數傳進去,看源碼。資源句柄就是上面代碼連接資料庫的「$conn」。
$sql = "select * from test1"; //sql語句$data = sqlsrv_query($conn,$sql); //$conn資源句柄if($data == true){ die("執行成功");
}else{ die("執行失敗");
}
2)獲取結果集
//以數值索引數組、關聯數組或這兩種數組的形式檢索下一行的數據。類似於mysql_fetch_arraysqlsrv_fetch_array
//以對象形式檢索下一行的數據。sqlsrv_fetch_object 1234
$sql = "select * from test1";$data = sqlsrv_query($conn,$sql);if($data == true){ while($row = sqlsrv_fetch_array( $data, SQLSRV_FETCH_ASSOC) ) { echo $row['id'].", ".$row['name']."<br />";
}else{ die( print_r( sqlsrv_errors(), true));
}
}
$sql = "SELECT fName, lName FROM Table_1";$stmt = sqlsrv_query( $conn, $sql);if( $stmt === false ) { die( print_r( sqlsrv_errors(), true));
}while( $obj = sqlsrv_fetch_object( $stmt)) { echo $obj->fName.", ".$obj->lName."<br />";
}
3)顯示錯誤信息sqlsrv_errors():上面都有用到這個函數,只要是操作資料庫發生錯誤,都可以使用這個函數列印出來看一下壓
這里就不用上代碼了
⑸ php腳本查詢sql資料庫添加參數
這種一般是sql語句的錯誤。你將php變數改為值之後將sql語句放到phpmyadmin或其他mysql工具里試一下是否能查到
⑹ php中如何將從外部獲取的參數成為sql語句的主體部分
$sql_rain="SELECTto_char(".$SNAME.",'fm990.0')asvaluefromMTERM_RAIN_FORECAST_HISwhereTO_CHAR(START_TIME,'yyyy-mm-dd')='".$startDate."'";
⑺ php可以和sql結合嗎
你說的 sql 估計是 Microsoft SQL Server
可以參考下面的文字
SQL Server 資料庫函數庫
------------------------------------------------------
本函數庫共有 16 個函數
SQL Server 是 Microsoft 從 SyBASE 取得並修改的資料庫系統,它只能在 Windows NT Server 上面執行。使用本函數只能使用 Windows NT Server 作為 PHP 的執行平台。
Microsoft SQL Server 的 query 語法為 Transact-SQL,和 SyBASE 的語法幾乎相同。本資料庫可能是所有 PHP 所支持資料庫中,中文書籍最多的資料庫了。
mssql_affected_rows: 取得最後 query 影響的記錄數。
mssql_close: 關閉與資料庫的連接。
mssql_connect: 連上資料庫。
mssql_data_seek: 移動列指標。
mssql_fetch_array: 返回數組數據。
mssql_fetch_field: 取得欄位信息。
mssql_fetch_object: 返回對象數據。
mssql_fetch_row: 返回單列的各欄位。
mssql_field_seek: 設定指標到返回值的某欄位。
mssql_free_result: 釋放返回佔用內存。
mssql_num_fields: 取得返回欄位的數目。
mssql_num_rows: 取得返回列的數目。
mssql_pconnect: 打開 MS SQL 伺服器長期連接。
mssql_query: 送出一個 query 字元串。
mssql_result: 取得查詢 (query) 的結果。
mssql_select_db: 選擇一個資料庫。
詳細資料:
-----------------------------------------------------
mssql_affected_rows
取得最後 query 影響的記錄數。
語法: int mssql_affected_rows(int [link_identifier]);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數用來取得最後一次對資料庫下 query 指令所影響的記錄數,會影響的為 INSERT、UPDATE 或 DELETE 等指令,而 SELECT 不會影響。參數 link_identifier 可省略,為打開資料庫的連接代號。返回值即為記錄數。
-----------------------------------------------------
mssql_close
關閉與資料庫的連接。
語法: boolean mssql_close(int [link_identifier]);
返回值: 布爾值
函數類型: 資料庫功能
內容說明
本函數用來關閉與 MS SQL Server 資料庫的連接,能關閉的為使用 mssql_connect() 函數打開的資料庫,若使用 mssql_pconnect() 打開的資料庫則不能以本函數關閉。參數 link_identifier 可省略,為打開資料庫的連接代號。關閉成功則返回 true 值。
參考
mssql_connect() mssql_pconnect()
-----------------------------------------------------
mssql_connect
連上資料庫。
語法: int mssql_connect(string [servername], string [username], string [password]);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數用來打開與 MS SQL Server 資料庫的連接。參數 servername 為欲連上的資料庫伺服器名稱。參數 username 及 password 可省略,分別為連接使用的帳號及密碼。使用本函數需注意早點關閉資料庫,以減少系統的負擔。連接成功則返回資料庫的連接代號,失敗返回 false 值。
參考
mssql_close() mssql_pconnect()
-----------------------------------------------------
mssql_data_seek
移動列指標。
語法: boolean mssql_data_seek(int result_identifier, int row_number);
返回值: 布爾值
函數類型: 資料庫功能
內容說明
本函數用來移動 MS SQL Server 數據文件中的列指標到指定的列上,可供 mssql_fetch_row() 等函數使用。參數 result_identifier 為查詢的代號值。參數 row_number 則為欲移往的記錄數。若失敗則返回 false 值。
參考
mssql_close() mssql_pconnect()
-----------------------------------------------------
mssql_fetch_array
返回數組數據。
語法: array mssql_fetch_array(int result);
返回值: 數組
函數類型: 資料庫功能
內容說明
本函數用來將查詢結果 result 拆到數組變數中。若 result 沒有數據,則返回 false 值。而本函數可以說是 mssql_fetch_row() 的加強函數,除可以將返回列及數字索引放入數組之外,還可以將文字索引放入數組中。
-----------------------------------------------------
mssql_fetch_field
取得欄位信息。
語法: object mssql_fetch_field(int result, int field_offset);
返回值: 對象
函數類型: 資料庫功能
內容說明
本函數返回的對象數據為 result 的欄位 (Column) 信息。返回對象的屬性如下:
name - 欄位名稱
column_source -欄位所在表格的數據文件名稱
max_length - 欄位的最大長度
numeric - 若為 1 表示本欄位為數字定義 (numeric)
參考
mssql_field_seek()
-----------------------------------------------------
mssql_fetch_object
返回對象數據。
語法: object mssql_fetch_object(int result);
返回值: 對象
函數類型: 資料庫功能
內容說明
本函數用來將查詢結果 result 拆到對象變數中。使用方法和 mssql_fetch_array() 幾乎相同,不同的地方在於本函數返回值是對象而不是數組。若 result 沒有數據,則返回 false 值。另外值得注意的地方是,取回的對象數據的索引只能是文字而不能用數字,這是因為對象的特性。對象數據的特性中所有的屬性 (property) 名稱都不能是數字,因此只好乖乖使用文字字元串當索引了。關於速度方面,本函數的處理速度幾乎和 mssql_fetch_array() 及 mssql_fetch_row() 二函數差不多,要用哪個函數還是看使用的需求決定。
參考
mssql_fetch_array() mssql_fetch_row()
-----------------------------------------------------
mssql_fetch_row
返回單列的各欄位。
語法: array mssql_fetch_row(int result);
返回值: 數組
函數類型: 資料庫功能
內容說明
本函數用來將查詢結果 result 之單列拆到數組變數中。數組的索引是數字索引,第一個的索引值是 0。若 result 沒有數據,則返回 false 值。
參考
mssql_fetch_array() mssql_fetch_object() mssql_data_seek() mssql_result()
-----------------------------------------------------
mssql_field_seek
設定指標到返回值的某欄位。
語法: int mssql_field_seek(int result, int field_offset);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數設定目前的指標到返回值的特定欄位中。參數 result 為返回值代碼。參數 field_offset 則為指定的欄位序數。
使用範例
mssql_fetch_field
-----------------------------------------------------
mssql_free_result
釋放返回佔用內存。
語法: int mssql_free_result(int result);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數可以釋放目前 MS SQL Server 資料庫 query 返回所佔用的內存。一般只有在非常擔心在內存的使用上可能會不足的情形下才會用本函數。PHP 程序會在結束時自動釋放。
-----------------------------------------------------
mssql_num_fields
取得返回欄位的數目。
語法: int mssql_num_fields(int result);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數可以得到返回欄位的數目。參數 result 為返回值代碼。
參考
mssql_query() mssql_fetch_field() mssql_num_rows()
-----------------------------------------------------
mssql_num_rows
取得返回列的數目。
語法: int mssql_num_rows(int result);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數可以得到返回列的數目。參數 result 為返回值代碼。
參考
mssql_query() mssql_fetch_field() mssql_num_fields()
-----------------------------------------------------
mssql_pconnect
打開 MS SQL 伺服器長期連接。
語法: int mssql_pconnect(string [servername], string [username], string [password]);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數和 mssql_connect() 雷同。不同的地方在於使用本函數打開資料庫時,程序會先尋找是否曾經執行過本函數,若執行過則返回先前執行的 ID。另一個不同的地方是本函數無法使用 mssql_close() 關閉資料庫。參數 servername 為欲連上的資料庫伺服器名稱。參數 username 及 password 可省略,分別為連接使用的帳號及密碼。
-----------------------------------------------------
mssql_query
送出一個 query 字元串。
語法: boolean mssql_query(string query, int plink_identifier]);
返回值: 布爾值
函數類型: 資料庫功能
內容說明
本函數送出 query 字元串供 MS SQL Server 做相關的處理或者執行。若沒有指定 link_identifier 參數,則程序會自動尋找最近打開的 ID。成功則返回 true 值。
-----------------------------------------------------
mssql_result
取得查詢 (query) 的結果。
語法: int mssql_result(int result, int row, mixed field);
返回值: 整數
函數類型: 資料庫功能
內容說明
本函數取得一格 query 的結果。參數 field 可以是欄位名稱、順序或者是 fieldname.tablename 的格式。在返回值量少時,可以使用本函數來處理。當資料庫大時,本函數的效率就有待考慮了,這時可以使用較有效率的 mssql_fetch_row()、mssql_fetch_array() 或 mssql_fetch_object() 等函數。
-----------------------------------------------------
mssql_select_db
選擇一個資料庫。
語法: boolean mssql_select_db(string database_name, int [link_identifier]);
返回值: 布爾值
函數類型: 資料庫功能
內容說明
本函數選擇 MS SQL Server 中的資料庫以供之後的數據查詢作業 (query) 處理。成功返回 true,失敗則返回 false。
-----------------------------------------------------
⑻ php怎樣使用參數化防止sql注入
可以使用php的pdo對象,有預處理查詢功能可以防止注入,再有,注入sql無非就是基於你sql的拼接問題影響的執行sql,也可以不用pdo預處理,把獲取查詢的參數裡面的非法字元比如單引號雙引號等這些字元手動過濾也可以的
⑼ php sql條件參數為數組
1、將二維數組轉換為一維數組
$arr_2 (這是二維數組,就是你上邊那個類型的,我這里就不貼了)
$arr_1 (這個保存轉化後的一維數組)
下面是二維轉化一維數組過程:
for($i=0;$i<count($arr_1);$i++){
$arr[] = $arr_2[$i]['cat_id'];
}
下面是循環輸出一維數組:
foreach($arr_1 as $key=>$val){
echo $key . '<br>' .$val;
}
輸出結果是所有的cat_id 鍵值。至於sql 中的循環,我想你看了這個以後應該會了。
原理就是將二維轉換為一維數組,然後根據條件實現循環查詢。這個轉化的過程,你可以使用for循環,也可以使用php自帶的合並數組函數,也可以使用高級點的spl高級數組合並。當然看你程序需要,如果是應用比較簡單的,循環是最佳選擇。
另外,邀請你加入我們php實驗室,相互學習。在此,祝聖誕快樂。
⑽ PHP執行SQL查詢
$haha = M(),$res = $haha->query($sql)。
或 $res = $waw->execute($sql)。
$sql中包含了表名,實例化模型時可以為空。注意query是查功能,execute是增刪改功能。