Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么这个函数总是返回true,即使它不应该';T_Php_Mysql_Function - Fatal编程技术网

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所说,您必须通过查询来解决这个问题。现在您正试图加载所有表行,这会带来一些性能问题。如果您只需要知道供应商的产品是否存在,那么查询是正确的选择。