我需要将一个字符串分成多个部分。该字符串是一组唯一的用户名,但我检索三个名称以及之间的空格。我需要将一些'放在一端到另一端的开头之间,以便我可以将它们用于MySQL查询目的。
我已经使用了数组,但这次是不同的,因为这个字段填充了数据库中的数据。
如果添加/删除用户,它将使用该数组,但如果没有,它将使用我想要格式化的字符串。
我现在有这个代码:
$Pessoas2= implode(" ", $_POST['Pessoas']);
$Pessoas2 = str_replace(';', ' ' , $Pessoas2);
(...)
$to = mysqli_query($con,"SELECT Email FROM utilizadores WHERE Nome IN ( $Pessoas2)");
while ($row = mysqli_fetch_assoc($to)){
echo $row['Email'];
echo ";";
foreach ($row as $destino);
echo $destino;
答案 0 :(得分:1)
使用以下代码:
$Pessoas2 = implode("','", $_POST['Pessoas']);
$Pessoas2 = "'".$Pessoas2."'";
而不是
$Pessoas2= implode(" ", $_POST['Pessoas']);
$Pessoas2 = str_replace(';', ' ' , $Pessoas2);
答案 1 :(得分:0)
从您的问题中不确定$_POST['Pessoas']
是否是一个字符串,其中用户名由空格分隔,或者是否为数组。
如果是由空格分隔的字符串,请尝试:
$Pessoas2 = "'" . preg_replace('/ /', "','", $_POST['Pessoas'])) . "'";
如果是数组,请尝试:
$Pessoas2 = "'" . implode("','", $_POST['Pessoas'])) . "'";
然后在查询中使用$Pessoas2
,就像编写它一样。
答案 2 :(得分:0)
在代码中要解决一些问题。我会回答你的问题,但也指出了一些问题。
//always escape values before db insertion - see real_escape_string here
$Pessoas2= mysqli_real_escape_string(implode("", $_POST['Pessoas']));
//using substr here to get rid of the trailing ','
//this is assuming the last name in the array has a trailing semicolon, don't use it otherwise.
$Pessoas2 = substr(str_replace(';', "','", $Pessoas2), 0, -3);
$to = mysqli_query($con,"SELECT Email
FROM utilizadores
WHERE Nome IN ('". $Pessoas2 ."')");
while ($row = mysqli_fetch_assoc($to)){
echo $row['Email'];
echo ";";
//the semicolon does not belong after the foreach here.
foreach ($row as $destino)
echo $destino;
}
那应该做你想要的,并帮助防止SQL注入。
答案 3 :(得分:-1)
有机会使用功能方法!哈哈
$Pessoas2 = array_map( function($val) {
return "'{$val}'";
}, explode(' ', $_POST['Pessoas']));
$sql = "SELECT Email FROM utilizadores WHERE Nome IN (".implode(',', $Pessoas2).")";