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\')';

しかし、私はこれに熟練していませんし、あからさまに明らかな何かを見逃しているかどうかもわかりません. 絶対に立ち往生していて、手を必要としています!

4

4 に答える 4

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、手元にある変数のいずれかにエラーがあります。

エコーされたクエリをSQL Formatter$queryで確認することを強くお勧めします(MS ACCESS を選択) 。

于 2013-07-08T05:27:14.437 に答える
0

使ってみて

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

これは、すべてのエスケープを必要とせずにはるかに簡単です。

于 2013-07-08T04:59:09.863 に答える
0
$query = 'SELECT '.$csvCriteria.", .....

する必要があります

$query = 'SELECT '.$csvCriteria.', ......
于 2013-07-08T04:52:32.057 に答える