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_*
功能套件已被弃用,建议使用mysqli
或pdo
〜,并且在代码中使用用户提供的内容(表单提交数据一般或querystrings),您应该使用准备好的语句来防范sql注射。
答
MySQL的接受link_identifier
link_identifier:MySQL的连接。如果未指定链接标识符,则假定由mysql_connect()打开的最后一个链接。如果没有找到这样的链接,它会尝试创建一个,就好像调用mysql_connect()时没有参数一样。如果未找到或建立连接,则会生成E_WARNING级别错误。reference
因此,您应该传递一个连接参数,如其他答案中所述。每次建立连接后,都应该关闭连接,以便不会遇到too manny connections
服务器错误。