PDO:bindParam空字符串

时间:2013-07-04 07:52:37

标签: php mysql pdo null

Theres在这里是一个类似的问题,但实际上并没有给我答案:
PHP + PDO: Bind null if param is empty

我需要在循环中使用我的语句,只需更改绑定变量 像:

$this->array = array(
    "cell1" => "",
    "cell2" => "",
);

$this->sth = $db->prepare("INSERT INTO `table`
    (`coloumn1`, `coloumn2`)
    VALUES (:coloumn1, :coloumn2)");
$this->sth->bindParam(:coloumn1, $this->array['cell1'], PDO::PARAM_STR);
$this->sth->bindParam(:coloumn2, $this->array['cell2'], PDO::PARAM_STR);

//Data proccessing...

foreach($data as $value){
    $this->array['cell1'] = $value['cell1'];
    $this->array['cell2'] = $value['cell2'];
    try {
        this->sth->execute();
        print_r($this->sth->errorInfo());
    }
    catch(PDOException $e){
        echo 'sh*t!';
    }
}

一切正常,直到其中任何一个值为空字符串。 我的问题是当'cell1'是一个空字符串时,绑定参数是一个空引用,它将无法工作。但由于循环,我需要引用的绑定,因此bindValue不是解决方案。

我需要循环非常糟糕,因为我想要处理大量数据。

有什么建议吗?

我在执行前尝试过:

foreach($this->array as $value){
   if(!$value) {
        $value = "";
    }
}

它不起作用。 解决我的问题的唯一方法是修改为:

    $this->array['cell1'] = !empty($value['cell1']) ? $value['cell1'] : "";
    $this->array['cell2'] = !empty($value['cell2']) ? $value['cell2'] : "";

但这似乎太垃圾了......

2 个答案:

答案 0 :(得分:0)

我知道它的尸体化,但也许会对某人有所帮助。 您试图检查变量false,而不是null。而不是将值重新应用于数组。

foreach($this->array as $value){
   if(!$value) {
        $value = "";
    }
}

尝试检查循环中的null

foreach($this->array as $index => $value)
{
   $this->array[$index] = !empty($value) ? $value : '';
}

答案 1 :(得分:-1)

您的问题与PDO无关,但与基本PHP无关。 当没有可用变量时 - 根本不能使用它。所以,你必须以某种方式创建它。你现在使用的方式不是“垃圾”,而是完全可以接受的。我宁愿把整个代码称为“rubbishy”,因为它的大小应该是它应该的两倍。

  

但由于循环,我需要引用的绑定,因此bindValue不是解决方案。

这个假设也是错误的。为什么你认为你不能使用按值绑定?

$sql = "INSERT INTO `table` (`coloumn1`, `coloumn2`) VALUES (?, ?)";
$sth = $db->prepare($sql);
foreach($data as $value)
{
    $value['cell1'] = !empty($value['cell1']) ? $value['cell1'] : "";
    $value['cell2'] = !empty($value['cell2']) ? $value['cell2'] : "";
    $sth->execute($value);
}

就像这个一样简单

  

我需要循环非常糟糕,因为我想要处理大量数据。

我不认为真的巨大,因为它适合PHP进程内存。但是,请考虑使用LOAD DATA INFILE查询真正的巨额金额。