【问题标题】:Unclosed quotation mark after the character string ''字符串 '' 后面的非闭合引号
【发布时间】:2011-05-31 09:22:59
【问题描述】:

试图将大量记录从 MySQL 数据库插入 SQL Server(2005 SQLExpress) 数据库。这是来自 PHP 的查询和错误。我不明白。所有开头的字符串都正确关闭但仍然..

INSERT INTO tbl_email (uniq_id, Respondent_ID, Bcode, BID, Email, Voornaam, Voorletters, Tussenvoegsel, Achternaam, Geslacht, Adres, Huisnummer, Toevoeging, Postcodecijfers, Postcodeletters, Woonplaats, Land, Telefoon1, Mobiel, Telefoon2, Matchkey, Profile, Geboortejaar, Geboortedatum, Leefsituatie, Gezinsgrootte, Inkomen, Beroep, Opleiding, Huis, Huisjaar, Huistype, Tuin, Auto, Beleggen, Kopenopafstand, Financien, Respondenttype, Charitype, Chari, Postcode, Huisdier, EV2, EV3, EV4, EV5, EV6, EV7, EV8, EV9, Aanmaakdatum, fk_ID_projectreactie, status_subscribed, unsubscribeddate, insertdatetime, editdatetime, to_delete) VALUES (6, "41", "288", "53", "test@hotmail.com", "a", "M", "", "0", "2", "0", "176", "", "5652", "EP", "a", "", "", "0", "0", "0", "", "0", "", "2", "2", "", "4", "4", "1", "2006", "", "", "", "1", "1", "", "3", "", "", "a", "1", "", "", "", "", "", "", "", "", "a", 0, 0, Null, Null, Null, 1)
Warning: mssql_query() [function.mssql-query]: message: Unclosed quotation mark after the character string ''. (severity 15) in crn_export_mssql.php on line 94

可能是什么问题。我通过 SQL Server 管理控制台单独运行此查询,它接受并插入。我什至在另一个 PHP 文件中运行了这个查询并插入了数据。但是,当我在 PHP 循环中执行此操作时,就会出现这个问题。,代码 sn-p 是,

while(//get rows from mysql)
{ //create query on runtime
$query = $strInsertDump . '('.implode(', ', $arrInsertField).')';
$result = mssql_query($query, $mslink);
}

编辑:

我现在使用 PDO,这是 errorInfo 返回的内容。

Array
(
[0] => HY000
[1] => 20018
[2] => Incorrect syntax near ''. [20018] (severity 5) [(null)]
[3] => -1
[4] => 5
[5] => OpenClient
)

【问题讨论】:

  • 您需要指定单引号而不是双引号。你试过了吗?
  • 您能否提供您的$query 的打印件?
  • 那是……相当多的领域。请简化为representative sample statement,它产生相同的消息但没有任何无关字段。
  • 来自埃因霍温的 Wijzenbeek 小姐可能不喜欢她的电话号码被这样公布?
  • INSERT INTO tbl_email (uniq_id, Respondent_ID, Bcode, BID, Email, Voornaam, Voorletters, Tussenvoegsel, Achternaam, Geslacht) VALUES (6, "41", "288", "53", "test@hotmail.com", "Mijntje", "M", "", "Wijzenbeek", "2"); Warning: mssql_query() [function.mssql-query]: message: Unclosed quotation mark after the character string ''. (severity 15) in crn_export_mssql.php on line 96 上面的查询很简单,但产生了同样的错误。

标签: php mysql sql-server


【解决方案1】:

旧的 mssql 扩展已过时。切换到SQL Server PHP driverPDO 版本),这样您就可以使用prepared statements,它更安全、性能更高,并且不会出现任何值编码问题,因为值与语句的其余部分分开.

$query = $db->prepare('INSERT INTO tbl_email (uniq_id, Respondent_ID, Bcode, ...) 
                       VALUES (:uid, :rid, :bcode, ...)');
while (/* ... */) {
    $query->execute(array(':uid' => ..., ':rid' => ..., ':bcode' => ..., ...));
}

【讨论】:

  • 这绝对看起来很有趣,让我试试...谢谢
  • 我使用了 PDO,但现在它说记录已插入,但 PHP 中没有错误,也没有插入记录。我已将整个块放入 Try/Catch 中,甚至将 error_reporting 设置为 E_ALL 但仍然没有...
  • @Khuram:只有将error mode 设置为PDO::ERRMODE_EXCEPTION,PDO 才会抛出异常。否则,您必须测试PDOStatement::execute 的返回值并使用PDOStatement::errorInfo 获取错误信息。此外,PDO 只会在错误模式为PDO::ERRMODE_WARNING 时发出警告消息。
  • 大家好,我使用了 PDO,这是我在 errorInfo() 中收到的信息;数组 ( [0] => HY000 [1] => 20018 [2] => '' 附近的语法不正确。[20018] (严重性 5) [(null)] [3] => -1 [4] => 5 [5] => 开放客户端)
【解决方案2】:

尝试删除除基本的 NOT NULL 列名和关联值之外的所有列名和关联值,然后慢慢将它们重新添加。

INSERT INTO tbl_email (uniq_id, Respondent_ID)
) VALUES (6, "41")

问题:“function.mssql-query”是 PHP 函数吗?

很高兴看到 SQL Server 正在接收什么。也许启用一些客户端日志记录。你的 SQL 在我看来看起来不错。

如果您包含 create table 语句,可能会允许人们提供更多帮助。

【讨论】:

  • mssql_query 是一个 php 函数,是的,它正在连接并且 SELECT 语句运行良好,我们只需将数据插入 MSSQL 一次。如果我复制查询而不是通过 PHP,则数据插入正常。我不确定了。
  • 这是最简单的查询形式。 INSERT INTO tbl_email (uniq_id, Respondent_ID, Bcode, BID, Email, Voornaam, Voorletters, Tussenvoegsel) VALUES (6, '41', '288', '53', 'test@hotmail.com', 'test', 'M', ''); Warning: mssql_query() [function.mssql-query]: message: Unclosed quotation mark after the character string ''. (severity 15) in crn_export_mssql.php on line 96 它收到的第一个单引号给出错误。但是,如果我在 SQL Server 管理工具中运行此查询,则它会插入记录。该字段本身是一个 nvarchar(250) 并允许 Null。
  • 您可以使用分析器查看 SQL Server 正在接收什么。 SQL Server Express 没有在包中提供探查器。也许这个免费版本会有所帮助,但我必须说我从未使用过它。 sites.google.com/site/sqlprofiler另一方面,您应该考虑在查询中使用参数,这肯定会解决您的问题。
猜你喜欢
  • 2019-02-14
  • 2021-07-12
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多