PDO语句未执行


PDO statements not executing?

我正在尝试使用 PDO(php 数据对象)在.php文件中执行查询,如下所示:

global $db, $table;
$sth = $db->prepare('INSERT INTO $table(user, timerun, magexp, crimsons, blues, golds, greens) VALUES (:user,:timerun,:magexp,:crimsons,:blues,:golds,:greens) ON DUPLICATE KEY UPDATE timerun=timerun+:timerun, magexp=magexp+:magexp, crimsons=crimsons+:crimsons, blues=blues+:blues, golds=golds+:golds, greens=greens+green');
$sth->execute(array(':user' => $user, ':timerun' => $timerun, ':magexp' => $magexp, ':crimsons' => $cr, ':blues' => $bl, ':golds' => $go, ':greens' => $gr));
echo "success";

但是,它实际上并没有更新我的表。我没有收到错误或任何东西。

我做错了什么还是不支持 PDO?PDO文档说:"当心:某些MySQL表类型(存储引擎)不支持事务。当使用不支持事务的表类型编写事务数据库代码时,MySQL将假装事务已成功启动。此外,发出的任何 DDL 查询都将隐式提交任何挂起的事务。

我相当确定我的MySQL表确实支持事务,因为常规的"mysql_query"确实有效。

谢谢。

我不确定你的代码,你在单引号字符串中有变量,它不起作用,你应该像这样使用双引号:

global $db, $table; 
$sth = $db->prepare("INSERT INTO $table(user, timerun, magexp, crimsons, blues, golds,  greens) VALUES (:user,:timerun,:magexp,:crimsons,:blues,:golds,:greens) ON DUPLICATE KEY   UPDATE timerun=timerun+:timerun, magexp=magexp+:magexp, crimsons=crimsons+:crimsons, blues=blues+:blues, golds=golds+:golds, greens=greens+green:"); 
$sth->execute(array(':user' => $user, ':timerun' => $timerun, ':magexp' => $magexp, ':crimsons' => $cr, ':blues' => $bl, ':golds' => $go, ':greens' => $gr)); echo "success";

为了安全起见:

首先,我将创建一些关联数组,将项目中所有可能的表作为键,然后使用 if(isset($validTables[$table])) 检查变量中的表是否作为数组索引存在,然后继续查询。例如

<?php
  $validTables = array('foo' => true, 'bar' => true, 'other' => true);
  if(isset($validTables[$table])) 
  {
    // query logic here
  }
  else throw new Exception(sprintf('Security error %s table not exists', $table));

检查此代码,因为我在没有使用 php 解析的情况下编写了它