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

Posted

技术标签:

【中文标题】未捕获的错误:调用未定义的函数 mysql_escape_string()【英文标题】:Uncaught Error: Call to undefined function mysql_escape_string() 【发布时间】:2016-04-09 10:04:57 【问题描述】:

致命错误:未捕获错误:调用 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....

【问题讨论】:

您发布了类似的问题***.com/questions/34599244/… 并以相同的***.com/questions/12859942/… 关闭 如果你连接到mysqli_(我怀疑你是),你不能混合mysql_函数。这些不同的 API 不会混合使用。 Why shouldn't I use mysql_* functions in PHP?的可能重复 作为 escape_string 函数的替代方案,您应该使用准备好的/参数化的查询,将参数绑定到查询而不是转义它们并直接插入它们。 php.net/manual/en/mysqli-stmt.bind-param.php Fred 谢谢各位...我使用了很多 mysql 功能,但我在 mysqli 上遇到了问题...您能告诉我一些让我做出如此大改变的小技巧吗 :)跨度> 【参考方案1】:

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

您的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 混合的以下内容:

Can I mix MySQL APIs in PHP? 你不能。 mysql_mysqli_ 或 PDO 等不要混合在一起。从连接到查询,您必须使用同一个。

脚注。

密码

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

请参阅以下内容。

CRYPT_BLOWFISH crypt() bcrypt() scrypt() On OPENWALL PBKDF2 PBKDF2 on PHP.net PHP 5.5 的 password_hash() 函数。 兼容包(如果 PHP https://github.com/ircmaxell/password_compat/

其他链接:

PBKDF2 For PHP

【讨论】:

$query = "INSERT INTO users (id, name, lname, uname, email, pass) VALUES (NULL, '$name' , '$lname', '$uname', '$email1', '$pass1')"; mysqli_query($con, $query); printf ("新记录的 id 为 %d。\n", mysqli_insert_id($con)); 我写了这个,但我没有在我的基地看到任何东西 @AmarMuratović 我的答案包含$link 用于连接,不确定您是否更改了它。另外,将or die(mysqli_error($con)) 添加到mysqli_query() IF $con 是您实际使用的连接的变量。 @AmarMuratović 我注意到了你的新问题。你在这里误解了我的评论。我还包括了另一种检查错误的方法。 if(!$query) echo "Error: " . mysqli_error($link); 但你没有这样做。 为什么刚才被否决了?尽管这里的投票并不好。【参考方案2】:

将您的 PHP 版本改回 PHP 5.6 即可正常工作。

【讨论】:

【参考方案3】:

我好像不知道你用的是哪个版本的PHP!

如果您的 PHP 是 7.x.x,那么只需重命名

$uname = mysqli_real_escape_string($link, $_POST['uname']);

$uname = $_POST['uname'];

【讨论】:

【参考方案4】:

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

希望这会有所帮助!

【讨论】:

以上是关于未捕获的错误:调用未定义的函数 mysql_escape_string()的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的错误:调用未定义的函数 Composer\Console\json_decode()

致命错误:未捕获错误:调用未定义函数 is_product()

致命错误:未捕获的错误:调用 C:\xampp\htdocs\ 中未定义的函数 mysql_connect()

未捕获的错误:将 laravel 5.8 升级到 8 后调用未定义的函数 Illuminate\Mail\TransportManager()

致命错误:未捕获的错误:调用 /homepages/ 中未定义的函数 mysql_pconnect() [重复]

致命错误:未捕获的错误:调用未定义的函数 mssql_query() [重复]