【问题标题】:Passing PHP String as SQL Command and Preserving Line Breaks将 PHP 字符串作为 SQL 命令传递并保留换行符
【发布时间】:2015-11-20 18:14:53
【问题描述】:

我正在尝试运行 SQL 存储过程,并将执行命令传递给服务器使用 PHP 的 PDO 类。这是我现在的脚本:

$db = new PDO("dblib:dbname=databaseName;host=hostName", databaseUser, databasePassword);
$query = "
    USE [thisDatabase]
    GO
    DECLARE @return_value int
    EXEC    @return_value = [dbo].[thisSproc]
            @State = 'GA',
            @Type = 'Counseling',
            @PVCampusVueCode = NULL
    SELECT  'Return Value' = @return_value
    GO";
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

请注意,当直接在数据库本身上运行该查询时,会正确返回结果而不会出错。

但是,当我使用我的 PHP 脚本运行它并解析结果时,在单词“GO”附近出现语法错误(SQL 错误 102)。这是因为该命令作为单行传递给 SQL 服务器,没有换行符。所以,它最终看起来像这样:

USE [thisDatabase] GO DECLARE @return_value int EXEC @return_value = [dbo].[thisSproc] @State = 'GA', @Type = 'Counseling', @PVCampusVueCode = NULL SELECT 'Return Value' = @return_value GO

这是一个问题,因为显然“GO”命令必须在它自己的行上。

我四处寻找解决此问题的方法,但找不到。如何保留换行符以便查询正确执行,或以其他方式解决问题?

【问题讨论】:

  • 只需删除GOs。调用过程时使用[thisDatabase].[dbo].[thisSproc]。您可以用分号分隔其余部分。
  • GO 不是 sql 语句。它是 SSMS 中的默认批处理终止符。此外,当想要从过程中返回值时,您应该使用 OUTPUT 参数。返回值旨在返回一个状态码,表示过程的执行状态。

标签: php mysql sql-server stored-procedures pdo


【解决方案1】:

只需将查询作为单独的 query() 调用运行即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    相关资源
    最近更新 更多