【问题标题】:Query error MySQL with PDO [closed]使用 PDO 查询错误 MySQL [关闭]
【发布时间】:2014-04-08 11:42:10
【问题描述】:

我在使用 MySQL 和 PHP 执行查询时遇到问题。 我使用 PDO 连接到数据库,当我运行查询时,它返回以下错误:

errorCode = 42000 
errorInfo = array ([0] => 00000 [1] => [2] =>) 

建议修改后,我使用的代码是这样的

require "connPDO.php";
ini_set('display_errors',1);
error_reporting(E_ALL);
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $PDO->prepare("INSERT INTO 'titacc' ('file', 'RGS', 'RGP', 'RGD', 'RGDG',          'RGOG', 'DenOrg', 'CodFiscOrg', 'TipoOrg', 'IntrTipoTass', 'IntrIncid', 'DenLocale', 'CodLocale', 'DataEv', 'OraEv',
'TipoGen', 'IncidGen', 'OrdPostoCodOrd', 'OrdPostoCapienza', 'TitoloEv', 'ProduttoreCinema', 'Autore', 'Esecutore', 'Nazionalita', 'Distributore', 'TATipoTit', 'TAQta',
'TACorrLordo', 'TAPrevendita', 'TAIVACorr', 'TAIVAPrev', 'TAImpPrest') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");

$stmt->execute(array(
$file,
$RGS,
$RGP,
$RGD,
$RGDG,
$RGOG,
$DenOrg,
$CodFiscOrg,
$TipoOrg,
$IntrTipoTass,
$IntrIncid,
$DenLocale,
$CodLocale,
$DataEv,
$OraEv,
$TipoGen,
$IncidGen,
$OrdPostoCodOrd,
$OrdPostoCapienza,
$TitoloEv,
$ProduttoreCinema,
$Autore,
$Esecutore,
$Nazionalita,
$Distributore,
$TATipoTit,
$TAQta,
$TACorrLordo,
$TAPrevendita,
$TAIVACorr,
$TAIVAPrev,
$TAImpPrest
));
if (! $stmt->exe1cute() )
{
echo "<b>Errore nella query!</b>"; echo"<br/>";
print_r($stmt->errorCode()); echo"<br/>";
print_r($stmt->errorInfo()); echo"<br/>";
print_r($PDO->errorInfo()); echo"<br/>";
die();
} else {
echo "<b>Inserimento avvenuto con successo</b>";
}
$PDO = null;

我阅读了其他帖子并尝试解决此问题,但错误仍然存​​在。 如果从控制台执行查询,我没有错误。

【问题讨论】:

  • 我还不知道你的问题出在哪里,但是当使用像 PDO 这样的扩展时,你还应该使用准备好的语句(bindParam()bindValue(),或者你可以直接替换它们execute()-函数)。这使您的代码更易于理解和维护,并且可以安全地防止 SQL 注入。
  • echo $query 看看输出是什么,你的语法有错误。另外,你为什么要这样使用 pdo?
  • @Kasipovic:我用 echo 试过了,没有收到任何错误...
  • @Padarom:感谢您提供的信息。我已经阅读并申请了,但错误总是一样的

标签: php mysql sql pdo


【解决方案1】:

使用准备好的语句。

$st = $pdo->prepare("INSERT INTO `table`(`col1`, `col2`) VALUES (:col1value, :col2value)");

然后在执行给出参数

$st->execute(array(
    'col1value'=>$value1,
    'col2value'=>$value2
));

http://www.php.net/manual/en/pdostatement.execute.php#109030

【讨论】:

  • 我按照建议修改了,但错误总是一样
【解决方案2】:

将您的代码更改为

ini_set('display_errors',1);
error_reporting(E_ALL);

$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $PDO->prepare("INSERT INTO tbl VALUES (?, ?, ... ?");
$stmt->execute(array(
    $col1,
    $col2,
    ...
    $col31
));

并在此处发布带有您运行的真实代码的 real 查询。

【讨论】:

  • 进行建议的更改后,我收到以下错误:致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 中有错误句法;检查与您的 MySQL 服务器版本相对应的手册,以获取在 file.php 的“第 6 行”附近使用的正确语法堆栈跟踪:#0 file.php(126):PDOStatement->execute(Array)#1 {main}在第 126 行的 file.php 中抛出
  • 在第 126 行我有以下代码:));
  • 您必须显示 查询的第 6 行
  • 我用实际查询修改了请求
  • 这就是你首先要做的。您使用了错误的引号。从表名和字段名中删除引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2011-05-01
  • 1970-01-01
  • 2013-06-25
相关资源
最近更新 更多