【问题标题】:Random mysql errors but mysql shows different query then send随机 mysql 错误但 mysql 显示不同的查询然后发送
【发布时间】:2012-11-23 09:18:05
【问题描述】:

我有一个脚本可以循环 2000 条客户记录并将它们复制到另一个数据库中。有时它运行完美,有时它返回一个 mysql 错误,并带有与 PHP 中发送的查询不对应的消息。这是错误消息(P A K'2012-12-04 11:05:09' ) O DU LIC TE EY UPDA):

[0] => 数组 (`在此输入代码` [级别] => 错误 [代码] => 1064 [消息] => 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'P A K'2012-12-04 11:05:09' 附近使用的正确语法 ) O DU LIC TE EY UPDA' 在第 45 行 )

发生错误时在 PHP 中打印的查询:

插入 `客户` ( `klantId`, `naam`, `地址`, `邮政编码`, `普拉斯`, `电话`, `移动`, `传真`, `电子邮件`, `网站`, `post_adres`, `post_postcode`, `post_plaats`, `kvknummer`, `btwnummer`, `rekeningnr`, `postbanknr`, `邮寄`, `创建`, `修改` )价值观 ( 1134, '纳姆', '地址 9L', '1234 SG', '普拉茨', 空值, 空值, 空值, 空值, 'www.test.nl', 空值, 空值, 空值, 空值, 空值, 空值, 空值, 1、 '2012-12-04 11:05:09', '2012-12-04 11:05:09' ) 重复密钥更新 `naam`=值(`naam`), `adres`=VALUES(`adres`), `邮政编码`=VALUES(`邮政编码`), `plaats`=VALUES(`plaats`), `telefoon`=VALUES(`telefoon`), `mobiel`=值(`mobiel`), `传真`=值(`传真`), `电子邮件`=值(`电子邮件`), `网站`=值(`网站`), `post_adres`=VALUES(`post_adres`), `post_postcode`=VALUES(`post_postcode`), `post_plaats`=VALUES(`post_plaats`), `kvknummer`=值(`kvknummer`), `btwnummer`=值(`btwnummer`), `rekeningnr`=值(`rekeningnr`), `postbanknr`=值(`postbanknr`), `邮寄`=值(`邮寄`), `created`=VALUES(`created`), `修改`=值(`修改`) ;

我的脚本在公司实习,而数据库在数据中心运行外部。脚本运行 50% 正确 50% 错误...

提前致谢!!

添加了带循环的脚本:

` $dbcon = getDbConnection(); $aClients = getClients(); // 返回对象 foreach ($aClients AS $oClient) { $sQuery = ' 插入 `客户` ( `klantId`, `naam`, `地址`, `邮政编码`, `普拉斯`, `电话`, `移动`, `传真`, `电子邮件`, `网站`, `post_adres`, `post_postcode`, `post_plaats`, `kvknummer`, `btwnummer`, `rekeningnr`, `postbanknr`, `邮寄`, `创建`, `修改` )价值观 ( ' . $dbcon->real_escape_string($oClient->id) 。 ', ' . $dbcon->real_escape_string($oClient->naam) 。 ', ' . $dbcon->real_escape_string($oClient->adres) 。 ', ' . $dbcon->real_escape_string($oClient->postcode) 。 ', ' . $dbcon->real_escape_string($oClient->plaats) 。 ', ' . $dbcon->real_escape_string($oClient->telefoonnummer) 。 ', ' . $dbcon->real_escape_string($oClient->mobielnummer) 。 ', ' . $dbcon->real_escape_string($oClient->faxnummer) 。 ', ' . $dbcon->real_escape_string($oClient->emailadres) 。 ', ' . $dbcon->real_escape_string($oClient->website) 。 ', ' . $dbcon->real_escape_string($oClient->afwijkend_adres) 。 ', ' . $dbcon->real_escape_string($oClient->afwijkend_postcode) 。 ', ' . $dbcon->real_escape_string($oClient->afwijkend_plaats) 。 ', ' . $dbcon->real_escape_string($oClient->kvknummer) 。 ', ' . $dbcon->real_escape_string($oClient->btwnummer) 。 ', ' . $dbcon->real_escape_string($oClient->bankrekening) 。 ', ' . $dbcon->real_escape_string($oClient->postbank) 。 ', ' . $dbcon->real_escape_string($oClient->mailing == 'ja' ? 1 : 0) 。 ', ' . $dbcon->real_escape_string($oClient->created) 。 ', ' . $dbcon->real_escape_string($oClient->modified) 。 ' ) 重复密钥更新 `naam`=值(`naam`), `adres`=VALUES(`adres`), `邮政编码`=VALUES(`邮政编码`), `plaats`=VALUES(`plaats`), `telefoon`=VALUES(`telefoon`), `mobiel`=值(`mobiel`), `传真`=值(`传真`), `电子邮件`=值(`电子邮件`), `网站`=值(`网站`), `post_adres`=VALUES(`post_adres`), `post_postcode`=VALUES(`post_postcode`), `post_plaats`=VALUES(`post_plaats`), `kvknummer`=值(`kvknummer`), `btwnummer`=值(`btwnummer`), `rekeningnr`=值(`rekeningnr`), `postbanknr`=值(`postbanknr`), `邮寄`=值(`邮寄`), `created`=VALUES(`created`), `修改`=值(`修改`) ;'; $dbcon->query($sQuery); }`

上次编辑: 在与数据库服务器相同的服务器上尝试了该脚本,然后它没有发生。它发生在某个地方...

设置为:脚本在服务器 A 上运行,数据库在服务器 B 上运行。不是同一个网络,因此使用 Internet 进行数据库连接。某处数据丢失...

【问题讨论】:

  • 你的错误信息真的缺少随机字母吗?您是否在某个时候 str_replacing 查询?
  • 可能有一些数据包含撇号 - 主要出现在名称或街道名称中。在这种情况下,查询没有正确结束。
  • 这是准确的输出。什么都没发生。只需将客户端插入 foreach 循环。

标签: php mysql loops random


【解决方案1】:

你没有很好地整理输入。如果在 PHP 中,您必须使用 mysql_real_escape_string() 使所有值都有效

'P A K'2012-12-04 11:05:09' 看起来你有一个 ' 很多人,这会导致错误。通过 \'

转义

查询有效,或者无效。良好的编码没有 50-50 的变化;因此,如果查询有效,则某些输入存在问题。

【讨论】:

  • 就是这样,查询是从 $sQuery 变量中打印出来的。没有单引号,所有字段都在 PHP 中转义。查询看起来不错,但不知何故它以某种方式变形。关于50-50的变化,我也确实认为......
  • 那么问题可能出在循环中。您可以发布执行循环的脚本吗?
  • 我在问题帖中添加了脚本
  • 在与数据库服务器相同的服务器上尝试了脚本,然后它没有发生。它发生在线上的某处......设置是:脚本在服务器A上运行,数据库在服务器B上运行。不是同一个网络,所以互联网用于数据库连接。某处数据丢失...
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 2014-01-02
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多