-1

我正在尝试创建一个函数来使用 mysqli(对我来说是全新的)检查 mysql 中的重复条目,但我无法解决这个错误。我有 3 个 php 文件:db.php - db connection functions.php 和我的函数(需要 db.php)和 submit.php - 接受输入的文件。

db.php:

<?php
define("HOST", "localhost"); // The host you want to connect to.
define("USER", "user"); // The database username.
define("PASSWORD", "pass"); // The database password. 
define("DATABASE", "db_list"); // The database name.

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
?>

函数.php:

require 'db.php';
function check($str, $mysqli) {

$checkdupe = $mysqli->prepare("SELECT name FROM list WHERE str = ?"); //line giving me error
$checkdupe->bind_param("s", $str);
$checkdupe->execute();
$checkdupe->store_result();

    if ($checkdupe->num_rows > 0) {
        //dupe found
        return true;
    } else {
            //no dupe
            return false;
    }
}

提交.php

require 'functions.php';

if (isset($_POST['name'])) {
    if (check($_POST['name'], $mysqli) == true) { //added $mysqli parameter
        echo "success!";
    } else {
        echo "fail;
    }
} else {
  echo 'invalid post';
}
?>
4

4 回答 4

2

你的函数定义是

function check($str, $mysqli) {

但是你只用第一个参数调用它。结果第二个参数为空。

check($_POST['name'])

所以使用,

check($_POST['name'], $mysqli)

此外,您无需检查 db.php 中的连接是否确实成功。在文件末尾添加:

if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
于 2013-07-30T14:36:51.190 回答
0

您的函数check需要 2 个参数。您只需为其分配 1 个属性:

if (check($_POST['name']) == true)

应该

if (check($_POST['name'], $mysqli) == true)

于 2013-07-30T14:37:01.457 回答
-1

db.php:

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

define("HOST", "localhost"); // The host you want to connect to.
define("USER", "user"); // The database username.
define("PASSWORD", "pass"); // The database password. 
define("DATABASE", "db_list"); // The database name.

$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);
var_dump('db:',is_object($mysqli));

函数.php:

<?php
require 'db.php'
var_dump('functions:',is_object($mysqli));
function check($str, $mysqli) {
    var_dump('check:',is_object($mysqli));

    $checkdupe = $mysqli->prepare("SELECT name FROM list WHERE str = ?");
    $checkdupe->bind_param("s", $str);
    $checkdupe->execute();
    $checkdupe->store_result();
    return $checkdupe->num_rows;
}

提交.php

<?php
require 'functions.php';
var_dump('submit:',is_object($mysqli));


if (isset($_POST['name'])) {
    if (check($_POST['name'], $mysqli)) {
        echo "success!";
    } else {
        echo "fail";
    }
} else {
  echo 'invalid post';
}
于 2013-07-30T14:58:11.743 回答
-2

尝试 :

global $mysqli;
check($mysqli, ...);
于 2013-07-30T14:28:43.777 回答