2015-06-11 20 views
0

我在準備語句中使用bindParam將行插入到表中時遇到了一些問題。PDO聲明中帶有bindParam的奇怪行爲

在這裏我的代碼。

$table = 'companies'; 
$fields = array('name', 'address', 'phone'); 
$values = array('Company Name', 'Company address', '555-9999999'); 

$sql = 'INSERT INTO '.$table.' ('.implode(', ', $fields).') VALUES (' 
        .substr(str_pad('', (count($fields) * 3), '?, '), 0, -2).')'; 

$statement = $db->prepare($sql); 

for ($i = 1; $i <= count($fields); $i++) { 
    $statement->bindParam($i, $$fields[$i-1]); 
} 

for ($i = 0; $i < count($fields); $i++) { 
    ${$fields[$i]} = $values[$i]; 
} 

try { 
    $result = $statement->execute(); 
    $this->rowCount = $result ? $statement->rowCount() : 0; 
} 
catch (Exception $ex) { 
    $this->error = $ex; 
    $result = false; 
} 

$ sql中就成了一個字符串,如 「INSERT INTO公司(名稱,地址,電話)VALUES(?,?,?)」

結合PARAMS一些變量,並給予價值的變量後,我執行該子句,但沒有任何反應,只是$ result是false,但沒有錯誤。也就是說,程序的執行不會進入catch塊。

這是什麼問題的代碼?任何解釋?

謝謝你的幫助。

+1

我沒有在它看起來還正常,但有一點要記住的是,參數必須按引用傳遞 - 我不確定'$ statement-> bindParam($ i,$$ fields [$ i-1]);'會工作......您是否嘗試過使用'bindValue'? – CD001

+0

正在用另一種方法進行更新。此外,我有一些日期字段和bindValue抱怨「日期不能轉換爲字符串」。 Argggggh – Dhouard

+0

嗯,我只是從字面上將你的代碼複製/粘貼到我的開發箱中的一個文件中,並在我的'test'數據庫中配置了表格......並且一切正常。 – CD001

回答

0

我終於弄清楚了。在我的情況下,問題是我有一個DateTime,我試圖直接存儲在數據庫中,因爲我有一個DateTime字段。

解決辦法:DateTime字段轉換爲字符串做

$dateTimeField->format('Y-m-d H:i:s')