2013-07-08 85 views
1

我通常理解使用反斜槓轉義引號背後的想法,或者使用反斜線來轉義,以便您可以在字符串等中使用反斜槓,但我遇到了嘗試傳遞查詢的問題odbc_exec()和使用表值函數,我只是似乎無法得到它停止給我轉義字符問題

SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark after the character string '0000005'. 

這是什麼樣子時,我硬編碼的變量:

$query = 'SELECT '.$csvCriteria.", googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('1','1','northbound','0006009','00000050370A2P000004','00060041270B2P000070','1')"; 

這工作正常。請注意,$ csvCriteria沒有給我任何問題。這就是我想要它看起來像:

$query = 'SELECT '.$csvCriteria.", googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('".$stepNum."', '".$segMarker."', '".$prevDirection."', '".$rdNoA."', '".$re_1."', '".$re_2."', '".$directionA."')"; 

但是我保持周圍$ re_1和$ re_2(我已經把在此之上)中的錯誤得到錯誤。

我試過的東西,我認爲可以工作的多個變體,如:

$query = 'SELECT '.$csvCriteria.", googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('".$stepNum."','".$segMarker."','".$prevDirection."','".$rdNoA.'\',\''.$re_1.'\',\'00060091100B1P000030\',\'1\')'; 

但我在這個既不精通熟練,我也不知道如果我失去了一些東西公然明顯。只是絕對卡住,需要一隻手!

+0

請回應'$ query',你可能會看到問題出在哪裏。 –

+0

嗨戴夫,我回應了$查詢,我有其他人看看我的結果(誰知道他們做得比我更多),我們仍然不明白爲什麼它給了我這個錯誤。 –

+0

'SELECT裏德\t重新定位\t reSpeedLimit \t reBearing \t RE \t RdNo \t LkNo \t RELAT \t reLon \t googStep \t段\t PrevailingDirection FROM jSelectorCSVCreator(1個西行\t「0000005' \t '0000005370A2P00003' \t '0000005370A2P00009' '1') \t \t ' –

回答

0
$query = 'SELECT '.$csvCriteria.", ..... 

應該

$query = 'SELECT '.$csvCriteria.', ...... 
+0

任何機會,你能告訴我你的想法整條生產線應該是什麼樣子?我相信我去這條路線已經和它並沒有解決任何事情。謝謝! –

0

嘗試使用

$query = "SELECT $csvCriteria, googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('$stepNum','$segMarker','$prevDirection','$rdNoA','$re_1','00060091100B1P000030','1')"; 

這是無需全部逃逸的要簡單得多。

1

我無法重現你的錯誤:

有問題的SQL是:

SELECT csvcriteria, 
     googstep, 
     segment, 
     prevailingdirection 
FROM jselectorcsvcreator('1', '1', 'northbound', '0006009', 
'00000050370A2P000004', '00060041270B2P000070', '1'); 

將數據置於變量,如:

$csvCriteria = 'csvCriteria'; 
$stepNum  = 1; 
$segMarker  = 1; 
$prevDirection = 'northbound'; 
$rdNoA   = '0006009'; 
$re_1   = '00000050370A2P000004'; 
$re_2   = '00060041270B2P000070'; 
$directionA = 1; 

使用的第一行代碼,它工作和使用一個不工作的都返回完全相同的東西:

$correct = 'SELECT ' . $csvCriteria . ", googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('1','1','northbound','0006009','00000050370A2P000004','00060041270B2P000070','1')"; 
$query = 'SELECT ' . $csvCriteria . ", googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('" . $stepNum . "','" . $segMarker . "','" . $prevDirection . "','" . $rdNoA . "','" . $re_1 . "','" . $re_2 . "','" . $directionA . "')"; 

echo $correct . "\n"; 
echo $query . "\n"; 

var_dump($correct === $query); 

的反應是(CodePad):

SELECT csvCriteria, googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('1','1','northbound','0006009','00000050370A2P000004','00060041270B2P000070','1') 
SELECT csvCriteria, googStep, Segment, PrevailingDirection FROM jSelectorCSVCreator('1','1','northbound','0006009','00000050370A2P000004','00060041270B2P000070','1') 
bool(true) 

我的猜測是,$csvCriteria或任何手頭的變量有錯誤。

我會強烈建議在尋找的$query中迴應查詢的SQL Formatter(選擇MS Access)

+0

這樣看來我在我的代碼中使用了一個名爲stripslashes()的函數。顯然這並沒有真正擺脫反斜槓,因爲我會假設它會。相反,我剛剛結束了使用str_replace(),它工作正常。如果沒有您確認沒有任何問題,我將無法工作。謝謝戴夫! –

0

事實證明我正在試圖通過一個看起來像這種「0000000 \ 000X00X0 \ 0000000」字符串,它運作得不太好。我決定使用stripslashes(),所以我可以更容易地傳遞變量,並在SQL中使用它。原來的stripslashes()不能像那樣工作。我用str_replace()代替,現在它工作正常。