php mysql_query在插入后没有返回任何内容(也没有插入任何内容)

时间:2010-11-24 15:44:45

标签: php mysql

我有以下代码:

    <?php
  if(!empty($error_msg))
   print("$error_msg"); 
  else
  { 
   require_once("../include/db.php");

   $link = mysql_connect($host,$user,$pass);
   if (!$link) 
    print('Could not connect: ' . mysql_error());
   else
   {      
    $sql = "insert into languages    values(NULL,'$_POST[language]','$_POST[country_code]');";
    $res = mysql_query($sql);

    print("$sql<br>\n");
    print_r("RES: $res");
    mysql_close($link);
   }
  }
 ?>

总之一句:它不起作用。 mysql_query不返回任何内容。如果我尝试相同的 在php_myadmin内查询,它的工作原理。它也没有插入任何东西。也尝试了 用户root,也没有。从来没有过这个。使用mysql 5.1和PHP 5.2。

有什么想法吗?

6 个答案:

答案 0 :(得分:4)

mysql_query将为INSERT查询返回一个布尔值。如果您var_dump $res,您应该看到要打印的布尔值。成功查询将返回TRUE,错误时返回FALSE。在任何情况下它都不会返回NULL。

此外,永远不会将输入数据(例如:$ _POST)直接传递给SQL查询。这是SQL注入的一个方法。首先使用mysql_real_escape_string

$language = mysql_real_escape_string($_POST['language']);
$sql = "INSERT INTO language SET language='$language'";

并且不要忘记引用您的数组索引(例如:$_POST['language']而不是$_POST[language])以防止E_NOTICE错误。

答案 1 :(得分:3)

您需要指定一个数据库,以便系统知道在...上运行查询的数据库。

http://php.net/manual/en/function.mysql-select-db.php

如果不选择数据库,则不会插入您的数据

答案 2 :(得分:2)

mysql_query为INSERT查询返回一个布尔值。如果在字符串上下文中使用,例如echo "$res"true将显示为1false将显示为空字符串。可能发生了查询错误。使用mysql_error()查找查询失败的原因。

$sql = "insert into languages    values(NULL,'$_POST[language]','$_POST[country_code]');";

这是非常糟糕的做法,因为恶意用户可以将精心制作的邮件发送到您的服务器(请参阅SQL Injection)。

你至少应该逃避输入。假设您的列名称被命名为“language”和“country_code”,则可以更好地替换上述代码:

$sql = sprintf('INSERT INTO LANGUAGES (language, country_code) VALUES ("%s","%s")',
    mysql_real_escape_string($_POST['language']),
    mysql_real_escape_string($_POST['country_code'])
   );

有关mysql_real_escape_string函数的说明,请参阅PHP Manual。对于初学者和有经验的程序员来说,这仍然是获取PHP函数信息的最佳资源。

我建议不要直接使用$_POST,而是使用filter_input()功能。它从PHP 5.2开始提供。

答案 3 :(得分:1)

使用INSERT查询,mysql_query会根据查询成功与否返回true或false。这里很可能会返回false。将行print_r("RES: $res");更改为print_r("RES: ".(int)$res);,您很可能会看到它打印RES: 0

问题可能是MySQL需要VALUES关键字之前的列名列表。

此外,您似乎将POST变量直接插入SQL - 您应该阅读SQL注入以了解为什么这是一个坏主意。

答案 4 :(得分:0)

- 我收回引用评论,但仍然不能直接插入$ _POST值.--

其次,我认为我没有看到print_r像这样使用过,尝试使用回声。

并且mysql_query只能在INSERT上返回一个布尔值,你期待什么?

答案 5 :(得分:0)

现在我有了这个:

$ language = mysql_real_escape_string($ _ POST ['language']);                 $ country_code = mysql_real_escape_string($ _ POST ['country_code']);

            $sql = "insert into shared_content.languages (id,language,country_code) values(NULL,$language,$country_code);";
            $res = mysql_query($sql);

            print("$sql<br>\n");
            var_dump($res);
            print(mysql_error());
            mysql_close($link);

输出:

插入shared_content.languages(id,language,country_code)值(NULL,NETHERLANDS,NL); bool(false)'字段列表'中的未知列'NETHERLANDS'