我正在学习避免SQL注入,我有点困惑.
使用bind_param时,我不明白其目的.在手册页上,我找到了这个例子:
$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
Run Code Online (Sandbox Code Playgroud)
现在,假设这4个变量是用户输入的,我不明白这是如何阻止SQL注入的.根据我的理解,他们仍然可以在那里输入任何他们想要的东西.
我也找不到'sssd'那里的解释.它有什么作用?这是什么使它安全?
最后一个问题:我读到了另一个mysqli_real_escape_string被弃用的问题,但它没有在手册中说明.它是如何弃用的?由于某种原因,它不能再逃避特殊角色吗?
注意:这个问题解释了bind_param的作用,但我仍然不明白为什么它更安全或更受保护. Bind_param解释
我只是启动了我的计算机,而XAMPP中的Apache不再有效.我怀疑是否与我今天早些时候第一次访问我父母网站的服务器有关.
错误日志提供此消息:
[Sun Aug 04 09:15:35.889700 2013] [authz_core:error] [pid 5088:tid 1776] [client ::1:58124] AH01630: client denied by server configuration: C:/Users/James/Desktop/Container/XAMPP/apache/icons/folder.gif, referer: http://localhost/Triiline1/
Run Code Online (Sandbox Code Playgroud)
我httpd.conf根据这些改变了这一部分:
<Directory "C:/Users/James/Desktop/Container/XAMPP/cgi-bin">
AllowOverride All
Options None
Require local
</Directory>
Run Code Online (Sandbox Code Playgroud)
我试过require all granted和require local,没有结果.
MySQL仍然在XAMPP中运行.我怎样才能解决这个问题?
更新:
几个小时后,我打开XAMPP,点击开始,它运行正常.没有线索.我感兴趣的是,如果再次发生任何人有解释或解决方案.
有一种简单的方法可以使用下拉select菜单作为提交按钮吗?我更愿意<input type="submit" name="submit">,在选择一个选项时没有公开表单自动提交?Javascript,jquery,php,css和纯HTML回答都适合我.
<form name="order" action="" method="get">
<select type="submit" name="carlist">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)