此问题在此处已有答案:
(9个答案)
1小时前关闭。
所以我正在把我的项目从基于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);
}
3条答案
按热度按时间siotufzp1#
此述词永远不会传回TRUE:
NULL是一个代表特殊“null”值的关键字。与NULL进行不等式比较将永远不会返回TRUE。
要测试
:id
是否包含非NULL值,请使用ANSI标准"IS NOT NULL"
运算符,如下所示:作为一种非标准的替代方法,您可以使用SQL特定的“null safe comparator”操作符,如下所示:
但是,您想要执行该测试是没有意义的,因为它与前面的 predicate 是冗余的。
当为
:id
提供的值为NULL时,您希望采取什么行为?您希望匹配每一行吗?(您的查询看起来与我们用于搜索条件的模式很熟悉,其中为bind参数提供NULL值将禁用搜索条件,如下所示:如果为
:id
提供的值为空值,则第二部分将返回TRUE,并且第一个条件的计算结果与此无关。如果:id
的值为非空值,则第二个条件将为FALSE,因此第一个条件必须为TRUE才能返回行。(But这只是一个猜测,不清楚您在那里尝试做什么。)
另外,当我们在一个语句中多次使用同一个命名参数时,我们遇到了PDO问题。(PDO文档在我们遇到这个问题时没有指出这方面的问题。)我们使用的解决方法是在语句中只引用一次命名参数,方法是使所有命名参数都是唯一的。
解决方法是执行类似以下操作:
(我不确定这是否在PDO的后续版本中得到了修复;它可能不再是一个需要像这样的解决方案的问题。)
(我不确定这是否能回答你的问题,但我试过了。)
dgtucam12#
你可以绑定一个数组中的值。这个函数需要做一些细微的改动--我添加了一个冒号,第二个绑定参数使用不同的占位符名称以避免PDO冲突,以及一个返回值。显然
otherColumnName
将不得不改变。如果这不是你想要的,请告诉我。我留下了一个评论...然后,要调用该函数,您将有这样一行代码:
ih99xse13#
这个问题已经问了8年了,但是如果碰巧有人在寻找类似的问题,这可能会有所帮助
OU: