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

事实证明,我试图传递一个看起来像这样“0000000\000X00X0\0000000”的字符串,但效果不太好。我决定使用 stripslashes() 这样我就可以更轻松地传递变量并在它在 SQL 中使用它时使用它。原来 stripslashes() 不是那样工作的。我改用 str_replace() ,现在可以正常工作了。

于 2013-07-09T00:22:03.803 回答
0
$query = 'SELECT '.$csvCriteria.", .....

应该

$query = 'SELECT '.$csvCriteria.', ......
于 2013-07-08T04:52:32.057 回答
0

尝试使用

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

这要简单得多,不需要所有的转义。

于 2013-07-08T04:59:09.863 回答