【问题标题】:MySQL error 2002 when use INSERT INTO使用 INSERT INTO 时出现 MySQL 错误 2002
【发布时间】:2014-06-20 18:32:46
【问题描述】:

我的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

编辑对不起,我粘贴了错误的代码,但它已经被更改了

【问题讨论】:

  • 我没有看到您的代码中的“INSERT INTO”调用在哪里。
  • 修改您的问题并包含省略的 INSERT INTO。您希望我们如何在不知道问题的情况下提供帮助?
  • 参考这个看看是否解决问题:stackoverflow.com/questions/1676688/…
  • 您正在混合使用 mysql_*mysqli_* 函数。仅使用mysqli_*
  • 您的代码非常容易受到 SQL 注入的影响。 login.php?username=admin' -- 会认为我是管理员而不知道密码。另外,不要以明文形式存储密码。

标签: php mysql mysql-error-2002


【解决方案1】:

您不能将mysqli_* 函数与mysql_* 函数混合使用。

替换这个:

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

if( !mysqli_query($con, $que) ) {
     echo  "ERROR!!: ".mysqli_error($con) ;
}

【讨论】:

    【解决方案2】:

    在插入查询中,您应该告诉您要插入哪些列。

    $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 语句,我可以删除表,如果我是一个黑帽,我什至可以删除整个数据库心情不好。

    使用准备好的语句意味着您将用户输入替换为VALUES(?, ?),而不是使用用户输入提供的值,然后您可以绑定将执行的参数并替换占位符。

    使用PDO 允许您使用命名参数,您应该看看。

    还请注意,您正在混合使用 mysql_*mysqli_*,它们不是同一个函数库,坚持使用一个(否则它根本不起作用),mysqli_* 更好 since mysql_* 已弃用.这可能会导致您的问题。

    【讨论】:

    • 易受硬编码值的 SQL 注入的影响?这对我来说是新的。
    • 查询不安全,应该做相应的更改,不代表我必须为他做。
    • 查询是完全安全的。由于用户没有提供任何值,因此无法将其用于 SQL 注入。
    • 抱歉,我的观点没有完全清楚。插入语句本身是安全的,但我高度假设该语句用于测试,一旦他开始工作,他将开始插入用户输入。选择查询也是如此,这是不安全的。
    • 关于选择查询你是对的。但是,您应该使用 select 查询作为示例,并且应该将其作为评论发布,因为它不会以任何方式回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2013-11-28
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多