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'] : "";
但这似乎太垃圾了......
答案 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
查询真正的巨额金额。