簡體   English   中英

傳入PHP的空白整數使我的存儲過程綁定失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM