PHP警告:mysqli::query():无法';拿不到mysqli

PHP警告:mysqli::query():无法';拿不到mysqli,php,mysql,mysqli,Php,Mysql,Mysqli,以下是我当前的代码: <?php $key = $_REQUEST['key']; $url = $_REQUEST['url']; include_once '../../dbconnect.php'; $query = $conn->query("SELECT * FROM members WHERE apikey='$key' && status='Active'"); $userRow=$query->fetch_array(); $conn-&g

以下是我当前的代码:

<?php 
$key = $_REQUEST['key'];
$url = $_REQUEST['url'];

include_once '../../dbconnect.php';

$query = $conn->query("SELECT * FROM members WHERE apikey='$key' && status='Active'");
$userRow=$query->fetch_array();
$conn->close();

/// Verify the URL starts with http:// or https://
if (0 === strpos($url, 'http://') || 0 === strpos($url, 'https://')) {
$url = $url;
} else {
$url = "http://$url";
}

/// Verify the key is 32 characters
if (!preg_match('/[^A-Za-z0-9]/', $key) && (strlen($key) == 32)) {

/// Verify the URL isn't malicious
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
    die('Error:  Invalid URL');
} else {

if ($userRow['status'] === 'Active') {

function generateRandomString($length = 8) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

$redirect = generateRandomString();

$addshort = $conn->query("INSERT INTO short_".$redirect[0]." (redirect, apikey, url) VALUES ('".$redirect."','".$key."','".$url."')");

if ($conn->query($addshort) === TRUE) {
echo "added correctly";
} else {
echo "there was an error";
}

$conn->close();

} else {
echo "Error:  Account Not Active";
}

}

} else {
die('Error:  Invalid API Key');
}
?>
您可以在我第一次连接到数据库的第7行看到:

$query = $conn->query("SELECT * FROM members WHERE apikey='$key' && status='Active'");
这条线路正在运行。但是,当我第二次连接进行
插入时,我收到了上述错误:

$addshort = $conn->query("INSERT INTO short_".$redirect[0]." (redirect, apikey, url) VALUES ('".$redirect."','".$key."','".$url."')");

长时间盯着这段代码看,我有什么遗漏吗?

您的连接已关闭,在执行第一条SELECT语句后,这意味着连接已提前关闭:

$conn->close();
在所有查询或重建连接之后,需要使用
close()
。第一个是更好的选择


您正在获得用户输入
$\u REQUEST['key']
,这意味着您的查询已为SQL注入打开,这将有助于您了解如何使用SQL注入防止您的代码:

您的连接已关闭,在执行第一个SELECT语句后,这意味着连接已提前关闭:

$conn->close();
在所有查询或重建连接之后,需要使用
close()
。第一个是更好的选择

您正在获得用户输入
$\u请求['key']
,这意味着您的查询已打开,可以进行SQL注入,这将帮助您了解如何使用SQL注入来防止代码的出现:

此:

$addshort = $conn->query("INSERT ...')");
^^^^^^^
if ($conn->query($addshort) === TRUE) {
                   ^^^^^
$addshort
是您的查询结果/句柄/对象,然后尝试再次执行该查询结果/句柄/对象,但该查询结果/句柄/对象无效
query()
需要一个SQL字符串,您正在传入一个对象

最重要的是,你很容易受到伤害。

这是:

$addshort = $conn->query("INSERT ...')");
^^^^^^^
if ($conn->query($addshort) === TRUE) {
                   ^^^^^
$addshort
是您的查询结果/句柄/对象,然后尝试再次执行该查询结果/句柄/对象,但该查询结果/句柄/对象无效
query()
需要一个SQL字符串,您正在传入一个对象


除此之外,您还容易受到攻击。

chk您的连接firstConnection不应该是问题,否则第一次查询应该会失败。您已经在选择
$conn->close()后关闭了连接
chk您的连接firstConnection不应该是问题,否则第一次查询应该失败。在选择
$conn->close()后,您已经关闭了连接这完美地修复了它!我会在4分钟内接受,让我来吧。知道为什么“出现错误”吗正在运行,而不是
echo“正确添加”?行被正确地添加到数据库中,因此我不确定为什么会发生错误…@JamesSandzalone:这很有趣,对于此错误,您需要检查MArkB answer:)James,@marc-b已经提到过,关于这个问题:)@JamesSandzalone:fogot-SQL注入不是很重要吗?它完美地解决了这个问题!我会在4分钟内接受,让我来吧。知道为什么“出现错误”吗正在运行,而不是
echo“正确添加”?行被正确地添加到数据库中,因此我不确定为什么会发生错误…@JamesSandzalone:这很有趣,对于此错误,您需要检查MArkB answer:)James,@marc-b已经提到过,关于这个问题:)@JamesSandzalone:fogot SQL注入不是很重要吗。。。