从另一个php文件调用mysqli函数


Call mysqli functions from another php file

我正在导入事务数据并将其保存到数据库中。有些事务数据缺少字段,所以我使用以下函数从一个单独的文件(file2.php)手动更新它们:

function categoryRules() {
    //rules for transactions
    $sql = "UPDATE Transactions 
                SET cat1 = 'Shops', cat2 = 'Supermarkets and Groceries'
            WHERE name LIKE '%shipt%'";
    if (mysqli_query($conn, $sql)) {
        echo "SHIPT UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }   
    $sql = "UPDATE Transactions 
                SET cat1 = 'Shops', cat2 = 'Food and Beverage Store', cat3 = 'Beer, Wine and Spirits'
            WHERE name LIKE '%liquor%'";
    if (mysqli_query($conn, $sql)) {
        echo "LIQUOR UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    $sql = "UPDATE Transactions 
                SET cat1 = 'Service', cat2 = 'Telecommunication Services'
            WHERE name LIKE '%vzwrls%'";
    if (mysqli_query($conn, $sql)) {
        echo "VERIZON UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    $sql = "UPDATE Transactions 
                SET cat1 = 'Recreation', cat2 = 'Gyms and Fitness Centers'
            WHERE name LIKE '%classpass%'";
    if (mysqli_query($conn, $sql)) {
        echo "VERIZON UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
}

为了在file1.php中清理我的代码,我在file1.php上调用file2函数:

$conn = mysqli_connect($host, $user, $pass, $database);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
include 'categoryRules.php';
categoryRules();
mysqli_close($conn);

这样做时,我得到以下响应:

错误:UPDATE Transactions SET cat1 = ' stores ', cat2 = 'Supermarkets .和杂货' WHERE name LIKE '%ship %'

错误:UPDATE Transactions SET cat1 = ' stores ', cat2 = ' supermarket and grocery ' WHERE name LIKE '%shipt%'

错误:UPDATE Transactions SET cat1 = ' stores ', cat2 = 'Food and Beverage Store', cat3 = 'Beer, Wine and Spirits' WHERE name LIKE '%liquor%'

错误:UPDATE Transactions SET cat1 = 'Service', cat2 = 'Telecommunication Services', name LIKE '%vzwrls%'

错误:UPDATE Transactions SET cat1 = 'Recreation', cat2 = 'Gyms and Fitness Centers' WHERE name LIKE '%classpass%'

似乎函数可能在文件2.php中运行,然后到达文件1.php,这是我打开,访问和关闭数据库链接的地方。有没有办法将它们导入文件1?除了创建文件2.php之外,有没有更好的方法来清理文件1.php的这部分代码?

啊,当然,我应该早点想到的

您在函数外部建立连接,因此$conn在函数内部不可见,只需将$conn作为参数传递给函数,它就会神奇地工作。这是一个简单的范围问题!

categoryRules.php

function categoryRules($conn) {    // <-- add parameter
    //rules for transactions
    $sql = "UPDATE Transactions 
                SET cat1 = 'Shops', cat2 = 'Supermarkets and Groceries'
            WHERE name LIKE '%shipt%'";
    if (mysqli_query($conn, $sql)) {
        echo "SHIPT UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }   
    $sql = "UPDATE Transactions 
                SET cat1 = 'Shops', cat2 = 'Food and Beverage Store', cat3 = 'Beer, Wine and Spirits'
            WHERE name LIKE '%liquor%'";
    if (mysqli_query($conn, $sql)) {
        echo "LIQUOR UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    $sql = "UPDATE Transactions 
                SET cat1 = 'Service', cat2 = 'Telecommunication Services'
            WHERE name LIKE '%vzwrls%'";
    if (mysqli_query($conn, $sql)) {
        echo "VERIZON UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    $sql = "UPDATE Transactions 
                SET cat1 = 'Recreation', cat2 = 'Gyms and Fitness Centers'
            WHERE name LIKE '%classpass%'";
    if (mysqli_query($conn, $sql)) {
        echo "VERIZON UPDATE PERFORMED";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
}
现在主脚本应该是
$conn = mysqli_connect($host, $user, $pass, $database);
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
include 'categoryRules.php';
// add $conn parameter to the call
categoryRules($conn);           
mysqli_close($conn);