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注入不是很重要吗。。。