我试图将这个$ _REQUEST数据插入我的MySQL数据库。代码如下所示:
<Window
x:Class="SortingAList.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SortingAList"
mc:Ignorable="d"
Title="MainWindow"
Height="350"
Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox
Text="{Binding NewJobType, Delay=1000}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Width="200" />
<ComboBox
Grid.Row="1"
ItemsSource="{Binding JobTypes}"
SelectedItem="{Binding SelectedJobType}"
DisplayMemberPath="Name"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Width="200" />
</Grid>
</Window>
MySQL成功插入我的啤酒&#39;表,但也创建2个空记录。有没有理由发生这种情况?
答案 0 :(得分:1)
因为$ _REQUEST是包含$ _GET,$ _POST和$ _COOKIE的关联数组,所以它们中的一些可能是空的,但无论如何都存在键。这就是为什么你要获得三条记录的原因。
我会添加条件if ($value!='') { ...insert... }
,但显然您仍然容易受到$ _GET包含的内容的影响,以防用户在网址中添加任何内容。
答案 1 :(得分:-1)
给它一个运行。您仍然容易受到可能的SQL注入攻击,但至少您会修剪您的值并且只尝试编写实际包含某些内容的值,再加上addslashes()您将帮助确保任何字符可能会破坏SQL被转义。
foreach ($_REQUEST as $key => $value) {
if(trim($key) == 'beer') {
if($beerid = trim($value)) {
$sql = sprintf('INSERT INTO beer (b_beer) VALUES ("%s")',addslashes($beerid));
if(mysqli_query($connection, $sql)){
echo "Records added successfully.";
} else {
printf("ERROR: Could not able to execute %s -- %s\n",$sql,mysqli_error($connection));
}
}
}
}
OR
由于您只处理一个请求,并且您知道该字段的名称为&#39; beer&#39;你可以这样:
if(isset($_REQUEST['beer']) {
if($beerid = trim($_REQUEST['beer'])) {
$sql = sprintf('INSERT INTO beer (b_beer) VALUES ("%s")',addslashes($beerid));
if(mysqli_query($connection, $sql)){
echo "Records added successfully.";
} else {
printf("ERROR: Could not able to execute %s -- %s\n",$sql,mysqli_error($connection));
}
}
}