Php 为什么这个函数总是返回true,即使它不应该';T
我有一个函数,它遍历Php 为什么这个函数总是返回true,即使它不应该';T,php,mysql,function,Php,Mysql,Function,我有一个函数,它遍历product数据库表,如果有一行supplierid和name与参数匹配,则返回true 但它总是返回真的,即使它不应该 function checkifhoused($productname, $supplier) { $db = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME); $sql = "SELECT * FROM " . TBL_PRODUCTS; $resul
product
数据库表,如果有一行supplierid
和name
与参数匹配,则返回true
但它总是返回真的,即使它不应该
function checkifhoused($productname, $supplier)
{
$db = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
$sql = "SELECT * FROM " . TBL_PRODUCTS;
$result = mysqli_query($db, $sql);
while ($row = $result->fetch_assoc()) {
if ($row['supplierid'] == $supplier and $row['name'] == $productname) {
return true;
}
}
return false;
}
第一:我可以建议您使用PDO扩展。它有更好的变量绑定选项。 第二:正如@pavel&Ro Achterbeg在他们的评论中提到的,您不需要从DB表中获取所有行,而是只检查存在指针参数的记录
<?php
define('TBL_PRODUCTS', 'TBL_PRODUCTS');
function checkifhoused($db, $productname, $supplier)
{
$sql="SELECT * FROM ".TBL_PRODUCTS." WHERE name = ? AND supplierid = ? ";
$stmt = $db->prepare($sql);
$result = $stmt->execute([$productname, $supplier]);
return $stmt->rowCount() > 0;
}
var_dump(checkifhoused($pdo, 'productname', 1));
var_dump(checkifhoused($pdo, 'other_productname', 1));
如果不知道您作为$productname
和$supplier
传递的内容,就无法回答此问题。请提供呼叫代码和模式。另一方面,如果您要做的只是检查一对“供应商,产品名称”是否存在一行,那么最好在查询中使用WHERE
条件来解决这个问题。可能与此相关为什么不选择所需的行<代码>。。。其中,supplierid=$supplier,name=$productname
,正如Ro Achterbeg所说,您必须通过查询来解决这个问题。现在您正试图加载所有表行,这会带来一些性能问题。如果您只需要知道供应商的产品是否存在,那么查询是正确的选择。