mysqli_prepare() expects parameter 1 to be mysqli

2020-05-03 01:29发布

问题:

Having trouble with procedural use of mysqli

Here's the function:

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();
}
?>

function.php

<?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;
}
?>

page.php

<?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;
}
?>

After using this there's

WARNING: mysqli_prepare() expects parameter 1 to be mysqli, null given in function.php on line 5.

Anyone?

回答1:

The way the two files db.php and function.php are glued together I think results in $link being defined as a global variable - you need to use global to access it within function:

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

or give the $link to the function explicitly through parameter:

function addItemToCatalog($var1, $var2, $var3, $var4, $link) {
    ...
}


回答2:

Since $link is being define in db.php probably you should

require db.php;

in function.php file



回答3:

`enter code here`
need
   <?php
function addItemToCatalog($var1, $var2, $var3, $var4) {
    $sql = 'INSERT INTO catalog (var1, var2, var3, var4, $link) 
            VALUES (?, ?, ?, ?)';

end
<?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, $link)){ 
    echo 'some error text';


标签: php mysqli