[英]Delete rows with ajax and php
這是刪除sql表中所有選定行的好方法嗎?
該代碼可以正常工作,但是也許還有其他更好的方法可以做到這一點。 real_scape_string函數在適當的位置,還是我應該在sql查詢之前放入foreach循環中?
$('.deleteRows').click(function(e)
{
e.preventDefault();
var val = [];
if(confirm("Biztos, hogy törölni szeretné a kijelölt sorokat?"))
{
$(':checkbox:checked').each(function(i){
val[i] = $(this).val();
});
$.ajax({
data: { val:val },
type: 'POST',
url: 'files/delete_all_uzenet.php',
success: function(data)
{
var result = $.trim(data);
$('#newsletterResult').html(data);
$('#newsletterModal').modal('show');
},
complete: function()
{
setTimeout(function()
{
location.reload();
}, 4000 );
}
});
}
return false;
});
php文件:
<?php
include_once("../../files/connect.php");
if(isset($_POST['val']))
{
foreach($_POST['val'] as $v)
{
mysqli_query($kapcs, $sql = "DELETE FROM kapcsolatfelvetel WHERE kapcsolat_id = '".mysqli_real_escape_string($kapcs, $v)."'") or die(mysqli_error($kapcs));
}
echo 'Rows deleted';
}
else
{
exit("No rows selected.");
}
?>
如果將所有操作合並到一個查詢中,則代碼執行速度將大大提高。 確認您有要刪除的值后,請執行以下操作:
$p = &$_POST['val']; //$p refers to $_POST['val'];
//clean all inputs
foreach($p as &$v) $v = "'". mysqli_escape_string($kapcs,$v) ."'";
//transform to "('value1', 'value2'...)"
$values = '('.implode(',',$p).')';
//build one sql to delete all rows
$sql = "DELETE FROM kapcsolatfelvetel WHERE kapcsolat_id IN $values";
然后,您可以運行查詢以一次刪除所有行。
PS:您使用轉義字符串來清理字符串; 這總比沒有好得多,但是不如准備好的語句和參數化查詢好。
PPS:您還應該檢查查詢是否成功執行。 僅僅因為您調用了mysqli_query
,就認為行被刪除是一個錯誤。
@甲蟲汁
那么,這是正確的方法嗎?
<?php
include_once("../../files/connect.php");
if(isset($_POST['val']))
{
$p = &$_POST['val'];
foreach($p as &$v)
{
$v = "'". mysqli_escape_string($kapcs, $v) ."'";
}
$values = '('.implode(',',$p).')';
mysqli_query($kapcs, $sql = "DELETE FROM kapcsolatfelvetel WHERE kapcsolat_id IN $values") or die(mysqli_error($kapcs));
echo 'Rows deleted ok.';
}
else
{
exit("No rows selected.");
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.