【发布时间】:2014-04-02 20:36:40
【问题描述】:
所以我正在将我的项目从基于 XML 的模式更新为 mysql 数据库模式。我正在尝试弄清楚如何执行此功能-如果可能的话。我想从数据库中获取一些值不等于数组中值的行。
function catchUpgrades($id)
{
$sql = "SELECT id, name, cost FROM upgrades WHERE prereq <> :id OR null <> :id";
$que = $this->db->prepare($sql);
$que->bindParam('id', $id[0]);
try {
$que->execute();
while($row = $que->fetch(PDO::FETCH_BOTH))
{
$array['name'] = $row[1];
$array['id'] = $row[0];
$array['cost'] = $row[2];
}
}catch(PDOException $e) {}
}
function showUpgrades()
{
$html = "<div id='upgrades'>";
$array = $this->getUserUpgrades();
$upgrades = $this->catchUpgrades($array);
print_r($upgrades);
}
【问题讨论】:
-
不是答案,但您不能在准备好的语句中使用同名的命名参数标记两次 (php.net/manual/en/pdo.prepare.php) ->
prereq <> :id OR null <> :id -
在那句话中,你是说 prereq 不等于 ID,或者 ID 不为空?该语句使您看起来好像有一个名为
null的数据库列,这将是一个问题。 -
@Sean:PDO 文档说得很清楚,不能两次使用相同的命名参数;当我们很久以前遇到那个“错误”时,我不记得文档中提到过这个限制。
-
@Sean,这可能是问题的一部分;它应该是“nullIf”......现在将其修复到其他答案!