php函数没有返回结果

问题描述:

我写了一个简单的php函数,试图在php中学习php和函数。php函数没有返回结果

功能的目标是将新用户上传到数据库

这里是我的功能

function upload_user($pId, $pName, $pEmail, $pPhone){ 
    $sql = "INSERT INTO users (member_id, name, email, phone) VALUES ('$pId', '$pName', '$pEmail', '$pPhone')"; 
    mysql_query($sql); 
} 

这里是我的表

<form name="register" method="post"> 
<input type="text" value="name" name="name"> 
<input type="text" value="email" name="email"> 
<input type="text" value="phone" name="phone"> 
<input type="submit" name="submit" value="register" /> 
</form> 

if(isset($_POST['submit'])){ 
    $id = rand(100, 10000); 
    $name = $_POST['name']; 
    $email= $_POST['email']; 
    $phone = $_POST['phone']; 

    upload_user($id,$name,$email,$phone); 
} 

我知道我成功地连接到数据库,因为我做了一个测试来回显连接是否成功。我也有PHP错误开启ini_set('error_reporting', E_ALL);但它给了我没有警告或错误

我的问题

什么也没有发生上述功能,即结果只是空白。如果任何人都可以向我指出我做错了什么,我会非常感激。

我认为最有可能的功能不知道数据库连接,因此您需要将db连接对象作为参数传递给函数,或者在函数中使用global标识符。

function upload_user($dbconn, $pId, $pName, $pEmail, $pPhone){ 
    $sql = "INSERT INTO `users` (`member_id`, `name`, `email`, `phone`) VALUES ('$pId', '$pName', '$pEmail', '$pPhone')"; 
    mysql_query($sql,$dbconn); 
} 

function upload_user($pId, $pName, $pEmail, $pPhone){ 
    global $dbconn; 
    $sql = "INSERT INTO `users` (`member_id`, `name`, `email`, `phone`) VALUES ('$pId', '$pName', '$pEmail', '$pPhone')"; 
    mysql_query($sql,$dbconn); 
} 

这些都不会返回一个值 - 如果确实想要返回一个值,那么从函数返回的值取决于您。你可以使用从查询为返回的响应(true或false):

function upload_user($pId, $pName, $pEmail, $pPhone){ 
    global $dbconn; 
    $sql = "INSERT INTO `users` (`member_id`, `name`, `email`, `phone`) VALUES ('$pId', '$pName', '$pEmail', '$pPhone')"; 
    return mysql_query($sql,$dbconn); 
} 


if(isset($_POST['submit'])){ 
    $id = rand(100, 10000); 
    $name = $_POST['name']; 
    $email= $_POST['email']; 
    $phone = $_POST['phone']; 

    /* using ternary notation to echo something based on return value of function */ 
    echo upload_user($id,$name,$email,$phone) ? 'Success' : 'Sorry, it failed'; 
} 

你应该知道,某些词,在MySQL和其他RDBMS,有着特殊的意义 - 所以最好是永远(IMO )在反引号中包装字段名称。另外值得注意的是,mysql_*功能套件已被弃用,建议使用mysqlipdo〜,并且在代码中使用用户提供的内容(表单提交数据一般或querystrings),您应该使用准备好的语句来防范sql注射。

MySQL的接受link_identifier

link_identifier:MySQL的连接。如果未指定链接标识符,则假定由mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它会尝试创建一个,就好像调用mysql_connect()时没有参数一样。如果未找到或建立连接,则会生成E_WARNING级别错误。
reference

因此,您应该传递一个连接参数,如其他答案中所述。每次建立连接后,都应该关闭连接,以便不会遇到too manny connections服务器错误。