2017-08-06 61 views
0

我正在创建更新数据库方法,并且所有内容都按照它应该的方式工作,除非当我尝试将'updated'=> NOW()添加到$ updateArray()。很明显,PDO会清理数据库中的离开0000-00-00的mysql函数。如何将MySQL NOW()函数从数组传递到清理值

public function update($table, $id, $updateArray) { 

    $valuesArray = array_values($updateArray); 
    $valuesArray[] = $id; 
    foreach ($updateArray as $col => $value) { 
     $values .= "$col = ?, "; 
    } 
    $values = substr($vals, 0, -2); 
    $query = $this->handle->prepare("UPDATE $table SET $values WHERE id = ?"); 

    return $query->execute($valuesArray); 
} 
$updateArray = ['title' => $_POST["title"], 'label' => $_POST["label"], 'body' => $_POST["body"], 'updated' => 'NOW()']; 
$db->update('pages', $_POST["id"], $updateArray); 

什么是最好的方法来得到这个?我所有的想法都非常黑客。

Sql structure

+0

把你的SQL结构的数据类型问题。 –

回答

0

我已经把一个now()功能,我不知道它的功能是最好的,但他们都工作。

function now() { 
    $date = new DateTime(); 
    $date->setTimezone(new DateTimeZone('Europe/London')); 
    return $date->format('Y-m-d H:i:s'); 
} 

function now() { 
    date_default_timezone_set('Europe/London'); 
    return date('Y-m-d H:i:s'); 
} 
$updateArray = ['title' => $_POST["title"], 'label' => $_POST["label"], 'body' => $_POST["body"], 'updated' => now()]; 
0

试试这个。数据库看起来很好。

将查询更改为此。

$query = $this->handle->prepare("UPDATE $table SET $values, updated=now() WHERE id = ?"); 

更新此

$updateArray = ['title' => $_POST["title"], 'label' => $_POST["label"], 'body' => $_POST["body"]]; 

我不认为会有任何伤害把数据是这样的。评论下面的结果或任何问题。

编辑1:在你的数据库更新,以日期时间

更改数据类型。

$date = date("Y-m-d H:i:s", time()); 

$updateArray = ['title' => $_POST["title"], 'label' => $_POST["label"], 'body' => $_POST["body"], 'updated' => '$date']; 
+0

这个问题是我想让我的类可以在不同的数据库表上重用。我试过如果/别的,但这很哈克。必须有一个更清洁的方式。 – Benwhittaker25

+0

更新是否工作? –

+0

是的两种方式都有效。 – Benwhittaker25