在WHERE子句中正确使用数组值

时间:2014-04-09 05:19:44

标签: php mysql preg-match-all

我正在尝试使用php设置回复通知应用程序。 当站点访问者填写网站上的回复表单并对讨论中的其他参与者哈希标记(#Mike,#Wale)时,应用程序提取哈希标记并使用preg_match_all()函数处理并最终提取用户名从hash-tags然后,它存储在一个数组中。

根据用户名数组中的值,应用程序应该遍历数据库中的users表,提取与用户名匹配的电子邮件地址,然后向每个用户发送回复通知。

应该执行select查询的应用程序部分引发了一个错误,我在下面突出显示:  警告:mysqli_error()期望在第33行的C:\ wamp \ www \ lost_and_found \ send_reply_notification.php中给出1个参数,0。

请看下面的代码:

 <?php
 ///////////////////extract matches into array//////////////////////////
 $data = "#MIKE The party will start at 10:30 pm and #John1975 run untill 12:30 am. Please #Emeka, could you inform #Joseph?";
 preg_match_all('/#[a-z0-9]+/i', $data, $match, PREG_PATTERN_ORDER);
$usernames=$match[0] ;
 /////////////convert array into a string using implode///////////////////
$newlist = implode( ",", $usernames );

$count = count($newlist);
/////////////////store username into array///////////
for ($i = 0; $i < $count; $i++) {

 preg_match_all('/#[a-z0-9]+/i', $newlist, $match, PREG_PATTERN_ORDER);
 $full_name=$match[0];}

////////////////////////Extract usernames/email pair from database////////////////
for ($i = 0; $i < $count; $i++)
    //dabase connection script
    $sql = 'SELECT * FROM users where username='. $full_name[$i];
    // submit the query and capture the result
    $result = $conn->query($sql) or die(mysqli_error());
    if ($result) 
        {
            //send mail query here.
        }   
?> 

SELECT查询中的WHERE子句似乎不接受&quot; $ full_name [$ i]&#39;作为价值输入。

我如何解决这个问题,以便使用WHERE子句中数组中的值来遍历users表?

感谢。

3 个答案:

答案 0 :(得分:1)

在查询中添加名称的引号,如

$sql = 'SELECT * FROM users where username="'. $full_name[$i].'"';

并且也不要忘记将代码放在{ }循环中的for内。

for ($i = 0; $i < $count; $i++)
{
    //dabase connection script
    $sql = 'SELECT * FROM users where username="'. $full_name[$i].'"';
    // submit the query and capture the result
    $result = $conn->query($sql) or die(mysqli_error());
    if ($result) 
        {
            //send mail query here.
        } 
}

答案 1 :(得分:0)

无需循环只是内爆数组并在查询中使用WHERE

$ sql ='SELECT * FROM用户名为IN的用户(“'。implode(”,“,$ full_name)。'”';

答案 2 :(得分:0)

$full_name = array();
for ($i = 0; $i < $count; $i++) {

     preg_match_all('/[a-z]+/i', $newlist, $match, PREG_PATTERN_ORDER);
     $full_name=$match[0];
 }

 $count = count($full_name);

您应该在循环外定义$full_name并再次重新设置$count

还将查询更改为

$sql = 'SELECT * FROM users where username="'. $full_name[$i].'"';