0

mysql に問題があります。これを実行すると、エラーが発生します: No such file or directory 2002, but SELECT query work perfect and print typ on the screen. この問題を解決するにはどうすればよいですか?

<?php
$con=mysqli_connect("db4free.net","****","****","*****");
if (mysqli_connect_errno($con))
{
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$username = $_GET['username'];
$password = $_GET['password'];
$result = mysqli_query($con,"SELECT Typ FROM Uzytkownik where Login='$username' and Haslo='$password'");

$row = mysqli_fetch_array($result);
$data = $row[0];
if($data){
echo $data;
}

$que =  "INSERT INTO Uzytkownik VALUES ('10','tr','t','a')";
if( !mysql_query($que) ) {
     echo  "ERROR!!: ".mysql_error().mysql_errno() ;
}
mysqli_close($con);
?>

この結果:

testERROR!!: No such file or directory2002

編集申し訳ありませんが、間違ったコードを貼り付けましたが、すでに変更されています

4

2 に答える 2

1

mysqli_*関数と関数を混在させることはできませんmysql_*

これを置き換えます:

if( !mysql_query($que) ) {
     echo  "ERROR!!: ".mysql_error().mysql_errno() ;
}

if( !mysqli_query($con, $que) ) {
     echo  "ERROR!!: ".mysqli_error($con) ;
}
于 2014-05-04T12:59:35.383 に答える
0

挿入クエリでは、挿入する列を指定する必要があります。

$que = "INSERT INTO Uzytkownik(col1, col2, col3, col4) VALUES ('10','tr','t','a')";

また、ほとんどのクエリはsql-injectionsに対して脆弱であることに注意してください。コードを保護するには、準備済みステートメントを使用する必要があります。

例: 選択クエリは次のようになります。

"SELECT Typ FROM Uzytkownik where Login='$username' and Haslo='$password'".

私がユーザーの場合、ユーザー名またはパスワード内で sql ステートメントを終了することにより、パスワードを使用せずにアクセスできます。テーブルを削除することも、機嫌が悪い場合はデータベース全体を削除することもできます。

準備済みステートメントを使用するということは、ユーザー入力によって提供された値を使用する代わりに、ユーザー入力を置き換えてからVALUES(?, ?)、実行されるパラメーターをバインドしてプレースホルダーを置き換えることができることを意味します。

PDOを使用すると、名前付きパラメーターを使用できます。これを確認する必要があります。

mysql_*また、混合していて、関数の同じライブラリではないことに注意してくださいmysqli_*。1つに固執し(そうしないと、単に機能しません)、はるかmysqli_*に優れsince mysql_*ています。これが問題を引き起こしている可能性があります。

于 2014-05-04T13:03:22.893 に答える