我正在创建一个表单,其中用户勾选复选框,然后1将存储在mysql表的该列中。如果用户没有勾选,则0将存储在数据库的该字段中。一列一个复选框。我的html代码是:
Type ;<label class="checkbox-inline"><input type="checkbox" name="mentor" value="1" >Mentor</label>
<label class="checkbox-inline"><input type="checkbox" name="core" value="1" >Core</label>
我的php代码是
$name = mysqli_real_escape_string($DBcon, $_POST['name']);
$mentor;
if (isset ($_POST['mentor']) == "1")
{
$mentor = 1;
}
else
{
$mentor = 0;
}
$core;
if (isset ($_POST['core']) == "1")
{
$core =1;
}
else
{
$core =0;
}
$insert = $DBcon->query("INSERT into contributor(name,mentor,core) VALUES('$name','$mentor','$core')");
但是我得到“你的sql语法有错误;检查与您的mysql服务器版本相对应的手册,以了解在“????\”exif\0\0mm\0*\0\0\0\0\0\0\0\0\0?\0\0\0\0?\0\0\0\0\0\0\”附近使用的正确语法。当我按submit按钮时,出现此错误
3条答案
按热度按时间mlnl4t2r1#
注意,您应该像其他人提到的那样使用pdo准备的语句
yqlxgs2m2#
你似乎混合了过程和面向对象
mysqli_*
代码中的语句。你应该选一个。在这里换行:改为:
此外,您还需要删除查询语句中的嵌套单引号:
安全影响:
我不能不说(也不能不附和上面的评论),你将自己置身于使用这种方法的sql注入攻击中。为了确保您受到保护,您应该考虑使用
mysqli_*
以及PDO_*
扩展。请考虑使用以下更安全的替代方案,而不是上面使用的代码:
8xiog9wr3#
php使用单引号表示文本。也就是说,$varname不会被解释为表示0,而是表示$varname。删除单引号,它应该工作。
"INSERT into contributor(name,mentor,core) VALUES($name,$mentor,$core)"
或'INSERT into contributor(name,mentor,core) VALUES('.$name.','.$mentor.','.$core.')'
如果这是为了工作,请阅读了php pdo和它增加的安全性。