如何在mysql查询中添加数组变量参数?(PHP)

时间:2011-09-23 20:12:00

标签: php mysql

我需要进行如下查询:

  UPDATE screening
                 SET maileddate = NOW(),
                     reference = '{$reference[$user_id]}'
                     WHERE user_id IN(....)

我想做判断,当引用[$ user_id]为空时,引用[$ user_id] = NULL。 我的代码是:

    if(empty($reference[$user_id]) || $reference[$user_id] == ''){
        $reference[$user_id] = NULL;
     }

但是当我执行查询时,如果$ reference [$ user_id]为空,则数据库中的引用值为空但不为null。我应该怎么做才能使它成为空?感谢

5 个答案:

答案 0 :(得分:2)

如果变量为空,您可能需要将NULL作为字符串传递给MySQL。使用不同的变量来保存可能的NULL内容并引用非null内容。别忘了逃避它:

$refid = empty($reference['user_id']) ? "NULL" : "'" . mysql_real_escape_string($reference['user_id']) . "'";

UPDATE screening SET maileddate = NOW(), reference = '{$refid}'
      WHERE user_id IN(....)

答案 1 :(得分:0)

只需将其设为字符串即为空。如果它为空$reference[$user_id] = 'null';

哦,对于查询,你应该使用reference IS null {$reference[$user_id]}而不是等号

答案 2 :(得分:0)

在没有看到其他代码的情况下,我的猜测是它与reference = '{$reference[$user_id]}'在单引号中{$reference[$user_id]}有关。 MySQL将会看到数据库中的内容。因此,如果$reference[$user_id]打印为空(因为它为空),则查询的那一位将是reference = ''而不是reference = NULL。对于在查询中使用的变量,您需要使用关键字NULL而不是实际值NULL。

举个例子:

$query = "UPDATE screening " . 
             "SET maileddate = NOW(), " . 
                 "reference = " . ($reference[$user_id] === NULL ? 'NULL ' : "'{$reference[$user_id]}' ") . 
                 "WHERE user_id IN(....)";

答案 3 :(得分:0)

$reference = 'reference = ';
$reference .= ' empty($reference[$user_id])  ? 'NULL' : "'". mysql_real_escape_string($reference[$user_id]) . "'";

$query = "UPDATE screening
      SET maileddate = NOW(),
      $reference       
      WHERE user_id IN(....)";

答案 4 :(得分:-1)

试试这个:

$user_id = empty($reference[$user_id]) ? 'NULL' : $reference[$user_id];
$sql = "UPDATE screening
                 SET maileddate = NOW(),
                     reference = " . $user_id . "
                     WHERE user_id IN(....)";