[英]Blank integer passed into PHP makes my stored proc bind fail
所以我有這個代碼:
$pfname = $input->get('pfname','','filter');
$state = $input->get('states');
$retCode=0;
$saveVendorProc = mssql_init("createVendorProc",$conn);
mssql_bind($saveVendorProc , "@VendorName", $pfname , SQLVARCHAR, false,false,10);
mssql_bind($saveVendorProc , "@VendorStateID", $state , SQLINT4, false,false,150);
$saveProcRes = mssql_execute($saveVendorProc);
mssql_free_statement($saveVendorProc );
$results = Array(
'error' => false,
'shopSQLID' => mssql_get_last_message()
);
$state
來自表單中的簡單HTML下拉列表。 表格序列化很好,當我選擇一個州時,一切都很完美。
但是如果未選擇狀態(並且我不想這樣做,那么用戶必須選擇它),則值為""
(與某些數字3到53相反)然后SQL給出的消息是超級的通用: "The statement has been terminated."
知道我做錯了什么可能是簡單的事情嗎?
謝謝
快速編輯:在代碼中也是我正確定義的$conn
變量。 就像我說的,如果在html表單中選擇了狀態下拉列表,則工作完全正常。
如果我正確理解了這個問題,請提交以下內容。
您最好的選擇是使用條件語句並檢查是否為空或者它是否等於什么。
例如:
if ($var > 0){
...
}
else{
...
}
要么
if ($var != 0){
...
}
要么
if(!empty($var)){
...
}
要么
if($var == ""){
... do something here
}
else { ... do something else }
要么
if( isset($var) && !empty($var) )
或者使用ctype_digit()
:
if( isset($var) && ctype_digit($var) )
is_numeric()
可能是您可以使用的另一個。 如果您的數據庫接受零值,則可以使用三元運算符。
$var = !empty($var) ? $var : "0";
注意:雖然我不是100%肯定,但你可以嘗試一下。
$state = isset($input->get('states')) ? $input->get('states') : "0";
旁注:^ ^ ^ ^ ^您可以用!empty()
替換isset()
!empty()
。
Refererences:
您是否嘗試將其保存為:intval($ state)進入proc? 您的過濾器也可能會影響結果。
變量$ states的輸出是多少? 輸出MSSQL消息?
如果這不起作用,請嘗試將$ state設置為(然后重復嘗試使用和不使用intval($ state)進行保存:
$state = $input->get('states','','RAW');
此外,您還可以編寫類似的內容(未經測試的代碼順便說一下......我的'empty'實現可能是可疑的):
if ($state != '' || empty($state) == false) {
// theres a value so you can include
mssql_bind($saveVendorProc , "@VendorStateID", $state , SQLINT4, false,false,150);
} else {
// do not include the binding
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.