2012-06-09 41 views
0

。問題在於將PHP數字值轉換爲在MS SQL Server的函數中使用。我用下面的語句刪除某些記錄:PHP PDO接口,我有使用PHP PDO接口與Microsoft SQL Server的麻煩MS SQL Server的

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, ?) = ?"; 

我準備和執行的代碼這一說法(稍微收縮):

$query = $pdo->prepare ($sql); 
$query->execute (array (strlen ('Text'), 'Text')); 

但查詢總是失敗。錯誤是:

SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 11.0] [SQL Server]參數數據類型nvarchar對於子字符串函數的參數3無效。

我假設從strlen的數量不解析爲一個號碼,但我不知道如何解決這一問題(除了手動添加到查詢)。

我發現這些鏈接,但是不是非常有幫助。

http://social.msdn.microsoft.com/Forums/en-US/sqldriverforphp/thread/0f09ac5e-62cd-4ccf-b2cb-848aad23811e

上的Drupal

http://drupal.org/node/1169202

的人有同樣的錯誤,但他們用石膏重建功能固定它。有沒有其他方法可以解決這個問題?

謝謝。

回答

0

不知道這是否會解決這個問題,但嘗試這樣的事情

$length = strlen('Text'); 
$text = "Text"; 

$sql = "DELETE FROM table WHERE SUBSTRING(attribute, 1, :len) = :text"; 
$query = $pdo->prepare ($sql); 
$query->bindParam(':len', $length, PDO::PARAM_INT); 
$query->bindParam(':text', $text, PDO::PARAM_STR); 
$query->execute(); 
+0

可悲的是這並沒有解決問題。它響應此錯誤:[Microsoft] [SQL Server Native Client 11.0] COUNT字段不正確或語法錯誤。無論哪種方式,我更喜歡解決方案,我不必重寫太多的代碼。 – Legoless

0

嘗試:

$query = $pdo->prepare ($sql); 
$query->execute (array ((int) strlen ('Text'), 'Text')); 
+0

對不起,沒有運氣。這顯示與問題中描述的問題相同的錯誤。我也嘗試了一個解決方法,將數字乘以1或使用函數intval。 – Legoless

+0

我會很驚訝,如果它的工作是誠實的,但我不得不添加它,以防萬一。這似乎是某種投射問題的任何一種方式,也許PDO本身通過引用它或其他東西強制變量是一個字符串。你有沒有嘗試在查詢本身以某種方式將值轉換爲數字/整數?我對MS SQL的使用經驗有限,但我想這是可能的。 – Mahn

+0

你能解釋一下嗎?你是什麼意思?我已經實現的當前解決方案是在準備查詢之前手動操作SUBSTRING函數。這是問號被替換爲查詢本身的號碼,並且這個東西起作用。不過,我仍在尋找更好的解決方案。 – Legoless