我试图使用mysqli prepared语句将表单中的变量插入到mySQL数据库中。我遇到的问题是我的一个变量不是必需的,所以当我没有在表单中输入任何内容时,我得到一个错误。 我该如何正确处理这个变量? 我需要使用不同的预备声明,还是可以保留我的声明?
答案 0 :(得分:0)
在@ Andrew的回答中,他是对的。详细说明
发布表单时,您可以检查它们是否真的存在,或者它们是否为空,在检查时,您可以为它们分配不同的值,以免弄乱您的SQL。
如果你有HTML5验证,例如必需的,你可以删除它们,但仍然是检查变量是否确实有价值的第一步。
答案 1 :(得分:0)
动态构建预准备语句。如果缺少某个字段,请不要包含该字段。例如,假设您的表单包含字段name
,age
和email
,并且客户提交name='Bo'
,age=27
但没有电子邮件。你可以做到
$columns=['name','email','age'];//all possible columns
$p = &$_POST; //form data, eg: ['name'=>'Bo','age'=>27] email missing
$data=[];//data that will be inserted
foreach($columns as $col){
//add available data to $data
if(isset($p[$col])) $data[$col]=$p[$col];
}
$insertCols = '('. implode(',',array_keys($data)) .')';//result: "(name,age)"
$insertVals = '('.trim(str_repeat('?,',count($data)),',').')';//result:"(?,?)"
$sql = "INSERT INTO myTable $insertCols VALUES $insertVals";
现在,您可以使用$sql
制作预先准备好的语句,并从$data