web-dev-qa-db-ja.com

キャッチされないエラー:未定義関数mysql_escape_string()の呼び出し

致命的なエラー:不明なエラー:C:\ xampp\htdocs\phoenixproject\register.php:16の未定義関数mysql_escape_string()の呼び出し:16スタックトレース:#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を混在させようとしていたことを知っています...

8
Amar Muratović

ここであなたを助けるために...(コメントが長すぎます)

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);
   }
_

APIのミキシングに関するStackの次の記事もお読みください。

  • PHPでMySQL APIを混合できますか?
  • できません。 _mysql__と_mysqli__またはPDOなどは一緒に混在しないでください。接続からクエリまで同じものを使用する必要があります。

脚注。

パスワード

また、パスワードをプレーンテキストで保存している可能性があることにも気付きました。これは推奨されません。ある時点でこれを使用してライブを行う場合は、データベースにパスワードをプレーンテキストとして保存しないでください。

以下を参照してください。

その他のリンク:

12

PHPバージョンを5.6にダウングレードすると、すべてが設定されます。エラーは100%除去されます。

お役に立てれば!

3
Sukhvir Singh

PHP=バージョンをPHP 5.6に戻すと、正常に動作します。

3
Waqas Ahmad