如何解决为什么我的查询没有执行/为什么没有将记录添加到我的数据库中?
| 我有一个表单,可将用户输入提交到以下php脚本(我已经排除了定义mysql信息的行):if (isset($_POST[\'ttname\'])); {
$dbc = @mysql_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME) OR die(\'No DB connection\');
$ttarray = array(1=> $_POST[\'mon1\'],$_POST[\'mon2\'],$_POST[\'mon3\'],$_POST[\'mon4\'],$_POST[\'mon5\'],$_POST[\'tue1\'],$_POST[\'tue2\'],$_POST[\'tue3\'],$_POST[\'tue4\'],$_POST[\'tue5\'],$_POST[\'wed1\'],$_POST[\'wed2\'],$_POST[\'wed3\'],$_POST[\'wed4\'],$_POST[\'wed5\'],$_POST[\'thu1\'],$_POST[\'thu2\'],$_POST[\'thu3\'],$_POST[\'thu4\'],$_POST[\'thu5\'],$_POST[\'fri1\'],$_POST[\'fri2\'],$_POST[\'fri3\'],$_POST[\'fri4\'],$_POST[\'fri5\']);
$name = $_POST[\'ttname\'];
$tt = implode(\',\',$ttarray);
$query = \"INSERT INTO Timetable (\'NAME\',\'TIMETABLE\')
VALUES ($name,$tt)\";
$result = mysql_query($query,$dbc) or die(\'Query Failed\');
}
但是,每当我尝试将数据提交到表单时,查询都将无法执行。
对于能帮助我解释为什么会发生的任何人,我将不胜感激。
解决方法
至少像这样:
$tt = mysql_real_escape_string(implode(\',\',$ttarray));
$query = \"INSERT INTO Timetable (\'NAME\',\'TIMETABLE\') VALUES (\'$name\',\'$tt\')\";
1)$tt
根本没有逃脱
2)您已经厌倦了插入比可用字段更多的值。通过将$tt
更改为\'$tt\'
,您将使字段数相同。
, 您正在将4个参数传递给mysql_connect,AFAIK DB一定不能是其中之一。
resource mysql_connect ([ string $server = ini_get(\"mysql.default_host\") [,string $username = ini_get(\"mysql.default_user\") [,string $password = ini_get(\"mysql.default_password\") [,bool $new_link = false [,int $client_flags = 0 ]]]]] )
至少要这样重写您的代码(非常详细):
if (isset($_POST[\'ttname\']));
{
$dbc = mysql_connect(DB_HOST,DB_USER,DB_PASS) OR die(\'No DB connection\');
mysql_select_db(DB_NAME);
$ttarray = array($_POST[\'mon1\'],$_POST[\'mon2\'],$_POST[\'mon3\'],$_POST[\'mon4\'],$_POST[\'mon5\'],$_POST[\'tue1\'],$_POST[\'tue2\'],$_POST[\'tue3\'],$_POST[\'tue4\'],$_POST[\'tue5\'],$_POST[\'wed1\'],$_POST[\'wed2\'],$_POST[\'wed3\'],$_POST[\'wed4\'],$_POST[\'wed5\'],$_POST[\'thu1\'],$_POST[\'thu2\'],$_POST[\'thu3\'],$_POST[\'thu4\'],$_POST[\'thu5\'],$_POST[\'fri1\'],$_POST[\'fri2\'],$_POST[\'fri3\'],$_POST[\'fri4\'],$_POST[\'fri5\']);
$sanitized = array();
foreach($ttarray as $value)
{
$sanitized[] = mysql_real_escape_string($value);
}
$name = mysql_real_escape_string($_POST[\'ttname\']);
$tt = implode(\',$sanitized);
$query = \"INSERT INTO Timetable (\'name\',\'timetable\') VALUES (\'\".$name.\"\',\'\".$tt.\"\')\";
$result = mysql_query($query,$dbc) or die(\'Query Failed\');
}
但是我强烈建议您将来使用PDO和预准备的语句来防止类似的高要求查询。 mysql_real_escape_string是一个很棒的函数,但是它不是100%准确的,并且不能使您的查询防注入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。