2014-10-03 118 views
-3

我試圖用PDO函數更新數據庫,但密碼將更新用戶名,但名稱不會更改,而是使用0而不是內容進行更新我也更改它?在字段中插入0

public function insert($table, $fields = array()){ 

    $keys = array_keys($fields); 
    $values = ''; 
    $x = 1; 

    foreach($fields as $field) { 
     $values .="?"; 
     if($x < count($fields)) { 
      $values .= ', ';  
     } 
     $x++; 
    } 


    $sql = "INSERT INTO users (`" . implode('`, `', $keys) . "`) VALUES ({$values})"; 

    if(!$this->query($sql, $fields)->error()) { 
     return true; 
    } 

    return false; 
} 

這裏顯示的數據:

$user = DB::getInstance()->update('users', 1, array(
     password => 'erwrwe', 
     name => 'Dan' 
)); 
+0

您能澄清您的問題嗎?很難理解你在描述什麼。當您只想更改密碼時,用戶名是否更改爲0? – Grice 2014-10-03 20:10:02

+0

對不起,我沒有正確解釋,所以我想更改字段的用戶名,密碼和名稱,但如果我更改了用戶的詳細信息密碼更改,用戶名dosnt更改但名稱更改爲表中的0? – Dan 2014-10-03 20:11:24

回答

0

數組從0開始,當你開始你的陣列在$x = 1算,這意味着你從柵欄柱患的錯誤(又名「關逐一個「)。

更改您的代碼

if($x <= count($fields)) { 
      ^--- 

$x = 0,而不是開始。


評論隨訪:看看你的代碼是這樣做的:

$欄=陣列( '名'=> '富', '密碼'=> '巴');

具有兩個項目的數組,所以count($files)2

$x = 1; 
foreach($fields as $field) { 
    if ($x < count(fields) { ... } 
} 

在第一次迭代:

field -> name, $x -> 1, count -> 2 
    $x < count --> 1 < 2 --> TRUE 
     ... add a ? 
     $x++ 

在第二次迭代:

field -> password, $x -> 2, count -> 2 
    $x < count --> 2 < 2 --> FALSE 

循環中止,並且你只有在您的結束了ONE 列表。

對於您的三項測試,您成功地處理了$ x = 1和$ x = 2,但是因爲$x < 3爲FALSE,所以循環在第三項中中止。

所以是的,這是一個錯誤的錯誤。如果您有$x <= 3或者使用0開始$ x,那麼您會正確處理數組中的最後一項。

+0

如果我添加所有三個插入,所以會發生一些非常奇怪的事情,所以用戶名,密碼和名稱2將填充,但第三個將設置爲0 – Dan 2014-10-03 20:20:39

+0

它不是「第三」,它是n-1。你爲n-1個條目設置了條目,但最後一個條目的n個條目總是被刪除。 – 2014-10-03 20:33:48

+0

那麼我該怎麼去錯了,因爲如果我只是在那裏放置名稱和密碼取決於順序它只插入第一個。我嘗試了你的建議,但沒有清除錯誤。 – Dan 2014-10-03 20:39:03

0

除了馬克B答案。如果要將文本插入數據庫中,則需要引號括起您的值:

$sql = "INSERT INTO users (`" . implode('`, `', $keys) . "`) VALUES ('{$values}')"; 
+0

如果我添加所有三個插入,所以會出現一些非常奇怪的事情,所以用戶名,密碼和名稱2將填充,但第三個將設置爲0 – Dan 2014-10-03 20:22:28

+0

您的第三個值未被評估。 – 2014-10-03 20:23:45

+0

但是,如果我拿走第三名,它只評估一個......?另外,如果我更改順序,它們的評估方式也會有所不同 – Dan 2014-10-03 20:26:31