这是整个php代码:
<html>
<head>
<title>Connect to MariaDB Server</title>
</head>
<body>
<?php
$dbhost = 'localhost';
$dbuser = 'test';
$dbpass = 'pass';
$dbname = 'databseName';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if(! $conn ) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully<br><br>";
function add($url, $category){
$sql = "INSERT INTO tt (url, category) VALUES ('$url', '$category');";
if(mysqli_query($conn, $sql)){
echo "Recorded.";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
}
if(function_exists($_GET['f'])){
$_GET['f']($_GET['url'], $_GET['cat']);
}
mysqli_close($conn);
?>
</body>
</html>
当我在浏览器中输入“ http://localhost/connect.php?f=add&url=www.google.com&cat=google”时,结果如下:
Connected successfully
Error: INSERT INTO tt (url, category) VALUES ('www.google.com', 'google');
Notice: Undefined variable: conn in /var/www/html/connect.php on line 24
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/html/connect.php on line 24
Fatal error: Uncaught Error: Call to undefined function mysqli_errot() in /var/www/html/connect.php:27 Stack trace: #0 /var/www/html/connect.php(32): add('www.google.com', 'google') #1 {main} thrown in /var/www/html/connect.php on line 27
我尝试了很多其他在网上找到的可能解决方案,但是没有一个起作用。请帮忙,在此先感谢!
答案 0 :(得分:1)
根据您的职能:
function add($url, $category) {
// code
}
您正在尝试使用变量$conn
。定义在函数的外部。
您应该将该变量传递给函数:
function add($url, $category, &$conn) {
// code
}
if(function_exists($_GET['f'])){
$_GET['f']($_GET['url'], $_GET['cat'], $conn);
}
您可以仅在函数内部使用global $conn;
,但建议避免完全使用global
。它使大型项目中的代码混乱而危险。控制较少。通过引用传递$ conn,可以明确确保使用正确的值。
请注意:准备好的语句将很好地用于SQL,因为您要传递的值中可能包含恶意SQL。
作为一个侧面说明:您正在执行的整个过程看起来有些不稳定,应该非常小心地将函数名称列入白名单并进行设置。您可能也希望将其全部转移到一个班级。