我的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
编辑抱歉,我粘贴了错误的代码,但已经更改了
答案 0 :(得分:1)
您不能将mysqli_*
函数与mysql_*
函数混合使用。
替换这个:
if( !mysql_query($que) ) {
echo "ERROR!!: ".mysql_error().mysql_errno() ;
}
与
if( !mysqli_query($con, $que) ) {
echo "ERROR!!: ".mysqli_error($con) ;
}
答案 1 :(得分:0)
在插入查询中,您应该知道要插入哪些列。
$que = "INSERT INTO Uzytkownik(col1, col2, col3, col4) VALUES ('10','tr','t','a')";
另请注意,您的大多数查询都容易受sql-injections攻击,您应使用prepared statements来保护您的代码。
示例:您的选择查询如下所示:
"SELECT Typ FROM Uzytkownik where Login='$username' and Haslo='$password'".
如果我是一个用户,我可以在不使用密码的情况下进入,通过在用户名或密码内结束sql语句,我可以删除表,如果我是一个blackhat,我甚至可以删除整个数据库心情不好。
使用预准备语句意味着您可以使用VALUES(?, ?)
替换用户输入,而不是使用用户输入提供的值,然后绑定将执行的参数并替换占位符。
使用PDO允许您使用命名参数,您应该看一下。
另请注意,您正在混合mysql_*
和mysqli_*
不是同一个函数库,坚持一个(否则它只会赢得工作)和{{1更好的mysqli_*
被弃用了。这可能会导致您的问题。