gpt4 book ai didi

php - php 中看似相同的 sql 查询,但插入了额外的一行

转载 作者:行者123 更新时间:2023-11-29 12:34:20 26 4
gpt4 key购买 nike

我通过两种方式生成以下查询,但使用相同的函数插入数据库:

INSERT INTO person VALUES('','john', 'smith','new york', 'NY', '123456');

以下方法会导致正确的插入,sql 数据库中没有多余的空白行

foreach($_POST as $item) 
$statement .= "'$item', ";

$size = count($statement);
$statement = substr($statement, 0, $size-3);
$statement .= ");";

下面的代码应该生成与上面的查询相同的查询(它们的回显相同),但是当我使用它时,在正确的数据行之后会在数据库中插入一个额外的空白行(带有 id)。所以每次插入两行。

$mytest = "INSERT INTO person VALUES('','$_POST[name]', '$_POST[address]','$_POST[city]', '$_POST[state]', '$_POST[zip]');";

因为我需要对表单中发布的项目进行验证,并且需要在将其存储到数据库之前进行一些操作,所以我需要能够使用第二种查询方法。

我无法理解两者有何不同。我使用完全相同的函数来连接和插入数据库,因此问题不可能存在。

下面是我的插入函数供引用:

function do_insertion($query) {      
$db = get_db_connection();
if(!($result = mysqli_query($db, $query))) {
#die('SQL ERROR: '. mysqli_error($db));
write_error_page(mysqli_error($db));
} #end if
}

感谢您对此提供的任何现场/帮助。

最佳答案

直接在查询中使用 $_POST 会让你面临很多不好的事情,这是不好的做法。在访问数据库之前,您至少应该做一些事情来清理数据。

$_POST 变量通常可以包含其他值,具体取决于浏览器、表单提交。您是否尝试过在 foreach 中进行 null/empty 检查?

!~伪代码请勿在生产中使用~!

foreach($_POST as $item) 
{

if(isset($item) && $item != "")
{
$statement .= "'$item', ";

$size = count($statement);
$statement = substr($statement, 0, $size-3);
$statement .= ");";
}

}

请阅读@tadman关于使用bind_param并保护自己免受SQL注入(inject)的评论。为了回答您的问题,您的 $_POST 可能包含被放入查询中并导致添加的行的空数据。

关于php - php 中看似相同的 sql 查询,但插入了额外的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com