2014-01-20 130 views
0

一直試圖弄清楚這一點太久,這裏是我的代碼更新多行Mysql的腓

else if(isset($_POST['mytrigger1'])) 
{ 
$title1 = ($_POST['titleHOME']); 
$title2 = ($_POST['titleLEARN']); 
$title3 = ($_POST['titleVTOUR']); 
$title4 = ($_POST['titleTRIVIA']); 
$title5 = ($_POST['titleALBUMS']); 
$title6 = ($_POST['titleFAQS']); 

$stmt = $mysqli->prepare("UPDATE page_title set PAGETITLE = 'title1' where PAGENAME='HOME',PAGETITLE = 'title2' where PAGENAME='LEARN'"); 
$stmt->execute(); 

} 

我想where子句中有多個更新多行。

+0

對於WHERE條件,您不能有多個'WHERE'並使用'AND'或'OR'而不是逗號。 –

+0

出於好奇,爲什麼不做一個事務並執行兩條UPDATE語句? –

+1

另外,我不認爲你的代碼是正確的;你似乎沒有使用'$ title1','$ title2'等。 –

回答

3

在放樣,你應該叫

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

這使您不必檢查任何返回值,只是把try { ... } catch { ... }塊。不要重複準備相同的陳述,重複使用它。

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

try { 

    $mysqli = new mysqli(...); 

    if (...) { 

     ... 

    } else if (isset($_POST['mytrigger1'])) { 

     $stmt = $mysqli->prepare("UPDATE page_title set PAGETITLE = ? where PAGENAME = ?"); 
     foreach ($_POST as $k => $v) { 
      if (!is_string($v) || strpos($k, 'title') !== 0) { 
       continue; 
      } 
      $stmt->bind_param('ss', $v, substr($k, 5)); 
      $stmt->execute(); 
     } 

    } 

    .... 

} catch (mysqli_sql_exception $e) { 

    echo $e->getMessge(); 

}