php函数返回没有结果

时间:2016-02-14 07:17:51

标签: php function

我写了一个简单的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);
}

我知道我已成功连接到数据库,因为我做了一个测试,以便在连接成功与否时回显。我也在ini_set('error_reporting', E_ALL);上启用了php错误,但它没有给我任何警告或错误

我的问题

上述功能没有任何结果,即结果只是空白。如果有人能够向我指出我做错了什么,那将非常感激。

2 个答案:

答案 0 :(得分:1)

我认为该函数很可能不知道数据库连接,因此您需要将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〜以及您在代码中使用用户提供的内容的位置(表单提交数据一般或者查询字符串)你应该使用预备语句来防止sql注入。

答案 1 :(得分:0)

mysql接受 link_identifier

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

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