PHP 使用 PDO 方式连接 sqlserver ,拼接 的 sql 命令总是报错
天蓬老师
天蓬老师 2017-04-10 18:05:54
[PHP讨论组]
    $sql = "Declare @v1 varchar(5000)
";
    $sql .=    "Declare @v2 varchar(5000)";
    $sql .=    "Set @v1 = '";
    $sql .=    "";
    $sql .=    "
";
    $sql .=    "
";
    $sql .= "2016121201380
";
    $sql .=    "订单
";
    $sql .=    "2016-12-12
";
    $sql .= "00
";
    $sql .=    "104179";
    $sql .=    "111
";
    $sql .=    "13707165174
";
    $sql .=    "
测试地址

"; $sql .= "测试
"; $sql .= "

"; $sql .= "
'

"; $sql .= "Set @v2 = '"; $sql .= ""; $sql .= "
"; $sql .= "
"; $sql .= "14241
"; $sql .= "金色
"; $sql .= "90C
"; $sql .= "1
"; $sql .= "188.00"; $sql .= "
"; $sql .= "'

"; $sql .= "Exec LW2DRP @v1,@v2"; try { $stmt = $dbh->prepare($sql); $stmt->execute(); } catch (Exception $e) { echo $e->getMessage(); }

报错:

 Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][SQL Server Native Client 11.0][SQL Server]'
' 附近有语法错误。 in C:\phpStudy\WWW\test.php on line 51

但是我把 echo htmlspecialchars($sql) 输出的代码,直接放到数据库去执行,是可以成功的。

Declare @v1 varchar(5000)
Declare @v2 varchar(5000)Set @v1 = '2016121201380订单2016-12-120010417911113707165174
测试地址
测试
'

Set @v2 = '14241金色90C1188.00'

Exec LW2DRP @v1,@v2

已经解决。从 word文档粘贴过来的时候,肯定带上了特殊字符。手动重新打一遍就 OK

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
PHP中文网

你保存的时候貌似没htmlspecialchars吧

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号