我有以下代码:
<?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。
有什么想法吗?
答案 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
将显示为1
,false
将显示为空字符串。可能发生了查询错误。使用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'