2011-03-20 101 views
0

我一直在解決與這一段時間,我不熟悉PHP語法,這裏是我的代碼:PHP錯誤的參數計數的mysql_query() - 可能的語法錯誤

$eventArray = array($this->ReturnLastRecordId() + 1, $managerid, $title, $description, $category, $address, $location, $startdate, $starttime, $enddate, $endtime, $price, $endofticketdate, $totalseats, $totalseats); 
    $sql = "INSERT INTO event (eventid, managerid, title, description, category, address, location, startdate, starttime, enddate, endtime, price, endofticketdate, totalseats, totalseats)"; 
    $data->StoreData($eventArray, $sql); 

在功能:

public function StoreData($dataArray, $sqlquery) 
    { 

     include 'config.php'; 

     $i = count($dataArray); 
     echo $i; 
     switch ($i) { 
      case 15: 
      mysql_query($sqlquery . "VALUES (" . '$arraydata[0]' , '$arraydata[1]', '$arraydata[2]', '$arraydata[3]', '$arraydata[4]', '$arraydata[5]', '$arraydata[6]', '$arraydata[7]', '$arraydata[8]', '$arraydata[9]', '$arraydata[10]', '$arraydata[11]', '$arraydata[12]', '$arraydata[13]', '$arraydata[14]' . ")", $con) or die (mysql_error()); 
      mysql_close($con); 
       break; 

     } 
    } 

很顯然,我已經檢查的參數多的次數,包括數據庫,但還是參數個數拋出:(。

+0

逗號應該是字符串內。你可以從突出顯示他們在錯誤的地方看到。 – pt2ph8 2011-03-20 21:42:53

+0

爲什麼有2x'totalseats'列?另一個嚴重的問題是'eventid'不是一個自動遞增的字段。按照你所做的方式增加'eventid'會引發競爭條件,即同時運行的兩個查詢可能會重疊並寫入錯誤的'eventid'。 – 2011-03-20 21:44:21

+0

準備好的陳述真的很麻煩,沒有人想要使用它們嗎? – cHao 2011-03-20 21:47:02

回答

1

您並未連接SQL字符串。您的代碼傳遞多個單獨的PHP函數參數。

最懶惰的解決將是:

$values = implode("','", $arraydata); 

mysql_query("$sqlquery VALUES ('$values')"); 

我會建議你附上整單串的mysql_query在雙引號預期,然後用內插字符串。避免手動.級聯。

+1

這顯然是最乾淨的解決方案,我也想建議使用'mysql_real_escape_string()'等轉義函數來保護查詢參數。 +1爲你 – 2011-03-20 21:51:07

+0

使用'$ arraydata = array_map(「mysql_real_escape_string」,$ arraydata);'這裏特別容易,如果數據還沒有被轉義過。 (請記住:magic_quotes對於單字節字符集數據庫僅適用於PHP3。) – mario 2011-03-20 21:53:01

+0

感謝優雅的解決方案,將顯着減少我的代碼:) – Ash 2011-03-20 22:24:34

0

你的SQL查詢的串聯是錯誤的。在你的解決方案中的逗號不在字符串中,因此被php解釋爲附加參數。

應該是這樣的:

mysql_query($sqlquery . " VALUES ('$arraydata[0]' , '$arraydata[1]',) 

等。

0

在構建您不應該擁有的SQL查詢時,您使用了連接操作數.。 試試看以下內容:

public function StoreData($dataArray, $sqlquery) { 

    include 'config.php'; 

    $i = count($dataArray); 
    echo $i; 
    switch ($i) { 
     case 15: 
      mysql_query($sqlquery . " VALUES ('{$arraydata[0]}', '{$arraydata[1]}', '{$arraydata[2]}', '{$arraydata[3]}', '{$arraydata[4]}', '{$arraydata[5]}', '{$arraydata[6]}', '{$arraydata[7]}', '{$arraydata[8]}', '{$arraydata[9]}', '{$arraydata[10]}', '{$arraydata[11]}', '{$arraydata[12]}', '{$arraydata[13]}', '{$arraydata[14]}')", $con) or die (mysql_error()); 
      mysql_close($con); 
      break; 
    } 
} 
0

嘗試用你的代碼的這種修改:

$eventArray = array(($this->ReturnLastRecordId() + 1), $managerid, $title, $description, $category, $address, $location, $startdate, $starttime, $enddate, $endtime, $price, $endofticketdate, $totalseats, $totalseats); 
    $sql = "INSERT INTO event (eventid, managerid, title, description, category, address, location, startdate, starttime, enddate, endtime, price, endofticketdate, totalseats, totalseats)"; 
    $data->StoreData($eventArray, $sql); 

public function StoreData($dataArray, $sqlquery) 
    { 

     include 'config.php'; 

     $i = count($dataArray); 
     echo $i; 
     switch ($i) { 
      case 15: 
      mysql_query($sqlquery . " VALUES (" . '$arraydata[0]' , '$arraydata[1]', '$arraydata[2]', '$arraydata[3]', '$arraydata[4]', '$arraydata[5]', '$arraydata[6]', '$arraydata[7]', '$arraydata[8]', '$arraydata[9]', '$arraydata[10]', '$arraydata[11]', '$arraydata[12]', '$arraydata[13]', '$arraydata[14]' . ")", $con) or die (mysql_error()); 
      mysql_close($con); 
       break; 

     } 
    }