未捕获的错误:调用未定义的函数 mysql_escape_string()

新手上路,请多包涵

致命错误:未捕获错误:调用 C:\xampp\htdocs\phoenixproject\register.php:16 中未定义的函数 mysql_escape_string() 堆栈跟踪:#0 {main} 在 C:\xampp\htdocs\phoenixproject\register.php 中抛出在第 16 行

如何解决这个问题?

 <?php
require("config.php");
?>
<?php
if(isset($_POST['submit'])){

$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];

if($email1 == $email2) {
    if($pass1 == $pass2) {
//All good. Nastavi broo.

$name = mysql_escape_string($_POST['name']);
$lname = mysql_escape_string($_POST['lname']);
$uname = mysql_escape_string($_POST['uname']);
$email1 = mysql_escape_string($email1);
$email2 = mysql_escape_string($email2);
$pass1 = mysql_escape_string($pass1);
$pass2 = mysql_escape_string($pass2);

mysql_query("INSERT INTO `users` (`id`, `name`, `lname`, `uname`, `email`, `pass`) VALUES (NULL, '$name', '$lname', '$uname', '$email1', '$pass1')") or die (mysql_error());

}else{
  echo "Sorry, your password is not corrext.";
  exit();
}
}else{
  echo "Sorry!";
}

} // brace for submit conditional

$form = <<<EOT
<form action="register.php" method="POST">
First Name: <input type="text" name="name" /></br>
Last Name: <input type="text" name="lname" /></br>
Username: <input type="text" name="uname" /></br>
Email: <input type="text" name="email1" /></br>
Confirm Email: <input type="text" name="email2" /></br>
Password: <input type="password" name="pass1" /></br>
Confirm Password: <input type="password" name="pass2" /></br>
<input type="submit" value="Register" name="submit" />
</form>
EOT;
echo $form;

?>

好吧,我知道我试图混合使用 mysql 和 mysqli ….

原文由 Amar Muratović 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 831
2 个回答

在这里为您提供帮助…(评论太长了)

您的 require("config.php"); 应包含以下内容:

旁注: 为您的主机使用正确的设置。

 $link = mysqli_connect("localhost", "username", "mpassword", "database") or die($link);

然后更改您的转义函数以使用它的 mysqli_ 版本并将连接参数传递给它:

 $name = mysqli_real_escape_string($link, $_POST['name']);
$lname = mysqli_real_escape_string($link, $_POST['lname']);
$uname = mysqli_real_escape_string($link, $_POST['uname']);
$email1 = mysqli_real_escape_string($link, $email1);
$email2 = mysqli_real_escape_string($link, $email2);
$pass1 = mysqli_real_escape_string($link, $pass1);
$pass2 = mysqli_real_escape_string($link, $pass2);

同样,查询也是如此。使用 i 版本并将连接作为第一个参数传递给它。

 mysqli_query($link, "INSERT INTO ...

使用 mysqli_error($link); 检查查询中的错误

因此,您可以将查询修改为

$query = mysqli_query($link, "INSERT INTO ...

和做

if(!$query){
   echo "Error: " . mysqli_error($link);
   }

另请阅读 Stack 上有关 API 混合的以下内容:


脚注。

密码

我还注意到您可能以纯文本形式存储密码。不建议这样做。如果您打算在某个时候使用此功能,请不要将密码作为纯文本存储在数据库中。

请参阅以下内容。

其他链接:

原文由 Funk Forty Niner 发布,翻译遵循 CC BY-SA 3.0 许可协议

最好是将 PHP 版本降级到 5.6,一切都会设置。错误将 100% 消除。

希望这可以帮助!

原文由 Sukhvir Singh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题