Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php mysql_查询在插入后不返回任何内容(也不插入任何内容)_Php_Mysql - Fatal编程技术网

php mysql_查询在插入后不返回任何内容(也不插入任何内容)

php mysql_查询在插入后不返回任何内容(也不插入任何内容),php,mysql,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 {

我有以下代码:

    <?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\u查询
将为插入查询返回一个布尔值。如果您
var\u dump
$res
,您应该会看到正在打印一个布尔值。如果查询成功,它将返回TRUE;如果查询出错,它将返回FALSE。在任何情况下,它都不会返回NULL

此外,永远不要将输入数据(例如:$\u POST)直接传递到SQL查询。这是SQL注入的一个配方。首先对其使用
mysql\u real\u escape\u string

$language = mysql_real_escape_string($_POST['language']);
$sql = "INSERT INTO language SET language='$language'";
不要忘记引用数组索引(例如:
$\u POST['language']
,而不是
$\u POST[language]
),以防止e\u注意到错误。

--我收回了引用注释,但直接插入$\u POST值仍然不好--

第二,我不认为我见过像那样使用打印,试着使用回音


而mysql\u查询只需要在INSERT上返回一个布尔值,您需要什么?

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


如果不选择数据库,您的数据将不会通过
INSERT
查询插入,mysql\u查询将根据查询成功与否返回true或false。在这里,它很可能返回false。更改行
print_r(“RES:$RES”)到<代码>打印(“RES:”(int)$RES)
并且您很可能会看到它打印
RES:0

问题可能是MySQL希望在
value
关键字之前有一个列名列表


此外,您似乎正在将POST变量直接插入到SQL中—您应该仔细阅读SQL注入,看看为什么这是一个坏主意。

mysql\u查询为插入查询返回一个布尔值。如果在字符串上下文中使用,例如
echo“$res”
true
将显示为
1
false
为空字符串。可能发生了查询错误。用于查找查询失败的原因

$sql = "insert into languages    values(NULL,'$_POST[language]','$_POST[country_code]');";
这是非常糟糕的做法,因为恶意用户可以向服务器发送精心编制的消息(请参阅)

您至少应该转义输入。假设您的列名命名为“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\u real\u escape\u string函数的说明,请参阅。对于初学者和有经验的程序员来说,这仍然是获取PHP函数信息的最佳资源

我建议不要直接使用
$\u POST
,而是使用函数。从PHP 5.2开始就可以使用它。

现在我有了这个:


$language=mysql\u real\u escape\u字符串($\u POST['language']); $country\u code=mysql\u real\u escape\u字符串($\u POST['country\u code'])

$sql=“插入共享的内容语言(id、语言、国家代码)值(NULL、$language、$country代码);”;
$res=mysql\u查询($sql);
打印(“$sql
\n”); var_dump($res); 打印(mysql_error()); mysql_close($link);
以及输出:

插入共享的内容语言(id、语言、国家代码)值(NULL、荷兰、NL);
bool(false)“字段列表”中的未知列“荷兰”

echo$sql,并在此处发布结果。
始终定义要插入的列。现在的设置方式如果结构发生更改,查询将中断。以后不要为自己做更多的工作。您的查询中可能有一些错误。.插入到语言值中(NULL,'nerlands','NL');数据类型是char(30)和char(5)+1,尽管我更喜欢var_dump而不是(int)cast,因为var_dump可以准确地显示它是什么。整个字符串是一个双引号字符串,所以这不会有问题。单引号是PHP的文字字符?选择返回什么吗?+1我想我们都错过了那个。好电话。只是一张便条,不是强制性的。类似于
INSERT-INTO-database.languages
的查询也可以使用(不过OP没有这样做)。如果未指定链接标识符,则mysql\u connect()打开的最后一个链接是assumed@mooizo:数据库链接由
mysql\u connect
生成,而不是
mysql\u select\u db
。您必须以某种方式定义要使用的数据库。字符串中的无引号数组索引将不会出现警告@安德烈:你说得对。我之所以提到它,是因为我用它来引述。然而,我认为你最好还是引用它来保持一致性;$country\u code=mysql\u real\u escape\u字符串($\u POST['country\u code']);$sql=“插入到共享的_content.languages值中(空,$language',$country_code”);”;$res=mysql\u查询($sql);
            $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);