0

我的mysql有问题。当我执行此操作时,这给了我一个错误:没有这样的文件或目录 2002,但 SELECT 查询工作完美并在屏幕上打印类型。我能解决这个问题吗?

<?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_*它们不是同一个函数库,请坚持使用一个(否则它根本不起作用)并且不推荐使用mysqli_*更好since mysql_*的方法。这可能会导致您的问题。

于 2014-05-04T13:03:22.893 回答