Php mysqli_prepare()要求参数1为mysqli

Php mysqli_prepare()要求参数1为mysqli,php,mysqli,Php,Mysqli,在程序上使用mysqli时遇到问题 下面是函数: function addItemToCatalog($var1, $var2, $var3, $var4) { global $link; ... } db.php <?php define("DB_HOST", "host"); define("DB_LOGIN", "login"); define("DB_PASSWORD", "password"); define("DB_NAME", "myDb"); $link

在程序上使用mysqli时遇到问题

下面是函数:

function addItemToCatalog($var1, $var2, $var3, $var4) {
    global $link;
    ...
}
db.php

<?php
define("DB_HOST", "host");
define("DB_LOGIN", "login");
define("DB_PASSWORD", "password");
define("DB_NAME", "myDb");

$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
if(!$link) {
    echo 'ERROR: ' . mysqli_connect_errno() . ': ' . mysqli_connect_error();
}
?>
<?php
function addItemToCatalog($var1, $var2, $var3, $var4) {
    $sql = 'INSERT INTO catalog (var1, var2, var3, var4) 
            VALUES (?, ?, ?, ?)';
    if (!$stmt = mysqli_prepare($link, $sql)){
        return false;
    }
    mysqli_stmt_bind_param($stmt, "ssii", $var1, $var2, $var3, $var4);
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
    return true;
}
?>
<?php
require_once ("db.php");
require_once ("function.php");

$var1 = $_POST['var1']; //showing without filtering methods
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
$var4 = $_POST['var4'];

if(!addItemToCatalog($var1, $var2, $var3, $var4)){ 
    echo 'some error text';
}
else { 
    header("Location: success.php"); 
    exit;
}
?>

function.php

<?php
define("DB_HOST", "host");
define("DB_LOGIN", "login");
define("DB_PASSWORD", "password");
define("DB_NAME", "myDb");

$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
if(!$link) {
    echo 'ERROR: ' . mysqli_connect_errno() . ': ' . mysqli_connect_error();
}
?>
<?php
function addItemToCatalog($var1, $var2, $var3, $var4) {
    $sql = 'INSERT INTO catalog (var1, var2, var3, var4) 
            VALUES (?, ?, ?, ?)';
    if (!$stmt = mysqli_prepare($link, $sql)){
        return false;
    }
    mysqli_stmt_bind_param($stmt, "ssii", $var1, $var2, $var3, $var4);
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
    return true;
}
?>
<?php
require_once ("db.php");
require_once ("function.php");

$var1 = $_POST['var1']; //showing without filtering methods
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
$var4 = $_POST['var4'];

if(!addItemToCatalog($var1, $var2, $var3, $var4)){ 
    echo 'some error text';
}
else { 
    header("Location: success.php"); 
    exit;
}
?>

page.php

<?php
define("DB_HOST", "host");
define("DB_LOGIN", "login");
define("DB_PASSWORD", "password");
define("DB_NAME", "myDb");

$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
if(!$link) {
    echo 'ERROR: ' . mysqli_connect_errno() . ': ' . mysqli_connect_error();
}
?>
<?php
function addItemToCatalog($var1, $var2, $var3, $var4) {
    $sql = 'INSERT INTO catalog (var1, var2, var3, var4) 
            VALUES (?, ?, ?, ?)';
    if (!$stmt = mysqli_prepare($link, $sql)){
        return false;
    }
    mysqli_stmt_bind_param($stmt, "ssii", $var1, $var2, $var3, $var4);
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 
    return true;
}
?>
<?php
require_once ("db.php");
require_once ("function.php");

$var1 = $_POST['var1']; //showing without filtering methods
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
$var4 = $_POST['var4'];

if(!addItemToCatalog($var1, $var2, $var3, $var4)){ 
    echo 'some error text';
}
else { 
    header("Location: success.php"); 
    exit;
}
?>

用了这个之后

警告:mysqli_prepare()要求参数1为mysqli,在第5行的function.php中给出空值


有人吗?

既然在db.php中定义了
$link
,您可能应该

require db.php;

在function.php文件中,两个文件
db.php
function.php
粘合在一起的方式,我认为导致
$link
被定义为全局变量-您需要在函数中使用它来访问:

function addItemToCatalog($var1, $var2, $var3, $var4) {
    global $link;
    ...
}
或者通过参数显式地为函数提供
$link

function addItemToCatalog($var1, $var2, $var3, $var4, $link) {
    ...
}
`在此处输入代码`
需要

可能
$link
函数中为空。php
这个问题已经被问过很多次了。在执行任何查询之前,请始终检查连接是否成功。这没有帮助((我认为这没有意义,因为我没有在function.PHP中调用函数,只是声明它并仅在PAGE.PHP中使用,其中需要DB.PHP。嗯,好的,您能够使用代码中使用的凭据很好地连接到DB吗?
$link=mysqli_connect(…)
@WilliamJanoti他正在检查
$link!=null
中的
db.php
,就在他连接之后。是的,它工作:)但是我不知道为什么?你能给gevi一些链接,我可以在那里读到吗?在php.net/mysqliDid中没有任何帮助。你在我的回答中读了这个链接吗?它解释了变量在php中的作用域。这实际上与mysqli本身无关,问题是
$link
被定义为一个全局变量,因此sn在函数中不可见。是的,现在很明显,我决定不使用全局变量,并通过参数给出了
$link
。谢谢:)您能解释解决方案吗?