函数中的变量范围存在问题,代码不止于此,但我试图简化以便能够轻松解释问题。
<?php
//simply connecting to a database with mysqli
$server='localhost';
$user='root';
$password='';
$database='mydatabase';
$mylink = mysqli_connect($server, $user, $password, $database);
// a simple function to add two fields to a table
function addpost($userid, $post){
$sql = "INSERT INTO posts (user_id, post) VALUES ('$userid', '$post')";
$result = mysqli_query($mylink, $sql;
echo "done";
}
//assign values to be inserted into the table
$userid = 4;
$followerid = "This is the post";
//call the function and pass arguements
add_post($userid, $followerid);
?>
我反复遇到以下错误
注意:未定义的变量:C:\ xampp \ htdocs \ practice \ xyz.php中的mylink 第13行
警告:mysqli_query()期望参数1为mysqli,null给定 在第13行的C:\ xampp \ htdocs \ practice \ xyz.php
问题显然是addpost函数不知道$ mylink。我显然可以简单地将代码移动到数据库连接到函数中,但我认为这不是正确的方法。我究竟做错了什么?请提前帮忙
答案 0 :(得分:2)
// a simple function to add two fields to a table
function addpost($userid, $post){
$sql = "INSERT INTO posts (user_id, post) VALUES ('$userid', '$post')";
$result = mysqli_query($mylink, $sql);
echo "done";
}
您的问题在于此功能。 function
关键字有效地向解释器说“这是我想要命名以供以后使用的一段代码”。此函数内的代码不知道在函数外声明的变量。
因为$mylink
在此函数中声明为no,所以当您尝试使用它时,php会替换null
。您正在调用的函数mysqli_query
不会接受第一个参数的null
输入。
有两种解决方法,第一种方法是将$mylink
作为参数添加到此函数并传入。或者,您可以使用global
关键字(请参阅here ),虽然这往往导致意大利面条代码。
function addpost($userid, $post, $mylink){
//your code
}
addPost($userid, $post, $mylink);
或者:
function addpost($userid, $post){
global $mylink;
//your code
}
后者被认为是脆弱的,因为这个函数与它所依赖的函数(特定名称的全局声明变量)之间没有明显的联系。此外,您可能遇到命名空间问题(假设两个地方修改了一个名为$mylink
的东西;您可以轻松地推断出调用函数时的范围吗?)。
答案 1 :(得分:1)
您可以将$ mylink作为参数传递给函数。
$server='localhost';
$user='root';
$password='';
$database='mydatabase';
$mylink = mysqli_connect($server, $user, $password, $database);
// a simple function to add two fields to a table
function addpost($userid, $post, $mylink) {
$sql = "INSERT INTO posts (user_id, post) VALUES ('$userid', '$post')";
$result = mysqli_query($mylink, $sql;
echo "done";
}
// then call it
addpost($userid, $post, $mylink);
答案 2 :(得分:0)
两件事
值应为
VALUES('". $variable1 ."', '". $variable2. "');";
您不能像常规字符串那样引用sql查询中的变量。他们很特别。此外,您在查询结束时缺少分号。请注意我这样做了。
);";
第一个分号用于查询,第二个分号用于php。
第二,你错过了a)
$result = mysqli_query($mylink, $sql;\
应该是
$result = mysqli_query($mylink, $sql);
希望这会有所帮助,欢迎来到stackoverflow!