这是我正在做的活动的摘录:
//checkpoint A
$allowed_area = array('MarketA', 'MarketB');
$valid_area = in_array($area,$allowed_area) === true ? TRUE : FALSE;
//checkpoint B
$crop_check = $db->query("SELECT Crop FROM crops");
$allowed_product = $crop_check->fetchall(PDO::FETCH_COLUMN);
$valid_product = in_array($product,$allowed_product) === true ? TRUE : FALSE;}
如果为TRUE,则两者都将为“1”。
这是我的示例消息:Eggplant MarketB
(这两个字符串分别使用preg_split分为$product
和$area
。)
这是我的IF声明:
if($valid_area == $valid_product){
$crop_query = $db->query("SELECT Crop, Price, Area FROM crops WHERE Crop = '{$product}' AND Area = '{$area}' LIMIT 1");
$result = $crop_query->fetch(PDO::FETCH_OBJ);
$message = "The current price of {$result->Crop} is P{$result->Price}/kg in {$result->Area}. }
这是我的示例SQL表:
Crop Price Area
Eggplant 23 MarketA
Rice 45 MarketB
如上所示,代码将执行IF语句,因为两个语句都返回TRUE值。但是,结果将是一个错误,因为茄子和MarketB不存在于同一行。
关于如何合并两个检查点的任何建议,以便他们在执行IF语句之前必须检查同一行中是否存在$product
和$area
?
我只是解决了问题,如果结果是假的,它会回应“不够数据”,但是非常感谢解决方案。
答案 0 :(得分:0)
答案 1 :(得分:0)
要理解你想要做什么有点难。我猜。
您的用户似乎已为$ area和$ product提供了价值。看起来你正在使用以下逻辑。
当特定产品在特定区域不可用时,即使区域和产品都有效,您也会遇到麻烦。
您的软件需要更多规格。
这样的规格清晰度非常有帮助。实际上,可用的代码很容易从清晰的规范中流出。
此列表中有三种故障模式和一种成功模式。如果你想把所有的失败模式都对待,这很容易,实际上比你拥有的更容易。此代码将进行查询并产生适当的结果。
$crop_query = $db->prepare("SELECT Crop, Price, Area
FROM crops
WHERE Crop = ?
AND Area = ?
LIMIT 1");
$message = "$product is not available for sale in $area";
if ($crop_query->execute(array($product,$area))) {
while ($result = $crop_query->fetch(PDO::FETCH_OBJ)) {
$message = "The current price of {$result->Crop} is P{$result->Price}/kg in {$result->Area}"
}
}
请注意使用if
和while
来处理查询的基本有效性以及结果集中行的可用性。在成功和失败的情况下,您最终都会收到可用的$消息。
显然,LIMIT
子句将结果集限制为单行,但使用while迭代结果集构建代码仍然是明智的。