我得到這個錯誤,當我嘗試用som moviegenres更新我的數據庫。錯誤的SQL查詢php
UPDATE RM_Movie2Genre SET
Error in executing query: 42000 Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
電影被保存但不與流派。任何人都可以看到這裏有什麼問題?我知道這是在UPDATE RM_Movie2Genre SET(標記爲粗體),但我看不出有什麼不對......
$output = null;
if($save) {
// First save information on movie
$sql = '
UPDATE RM_Movie SET
title = ?,
year = ?,
image = ?,
pris = ?,
director = ?,
length = ?,
plot = ?,
imdb = ?,
trailer = ?,
filter = ?
WHERE
id = ?
';
$params = array($title, $year, $image, $pris, $director, $length, $plot, $imdb, $trailer, $filter, $id);
$db->ExecuteQuery($sql, $params);
// Then save information on genre
foreach($genre as $val) {
**$db->ExecuteQuery('UPDATE RM_Movie2Genre SET', array($val));**
}
$output = 'Informationen sparades';
}
此代碼將只能與更新/插入電影替換所有電影。我將使用我的代碼進行更新和插入。
// Get all genres and select those that should be selected
$sql = 'SELECT * FROM RM_MovieGenre';
$genres = $db->ExecuteSelectQueryAndFetchAll($sql);
$sql = 'SELECT idRM_MovieGenre AS id FROM RM_Movie2Genre WHERE idRM_Movie = ?';
$myGenres = $db->ExecuteSelectQueryAndFetchAll($sql, array($id), 0, PDO::FETCH_COLUMN);
$selectOptionGenres = "<select multiple name='genre[]'>";
foreach($genres as $key => $val) {
$selected = in_array($val->id, $myGenres) ? ' selected' : null;
$selectOptionGenres .= "<option value='{$val->id}'{$selected}>{$val->name}</option>";
}
$selectOptionGenres .= '</select>';
// Check if form was submitted
$output = null;
if($save) {
// First save information on movie
$sql = '
UPDATE RM_Movie SET
title = ?,
year = ?,
image = ?,
pris = ?,
director = ?,
length = ?,
plot = ?,
imdb = ?,
trailer = ?,
filter = ?
';
$params = array($title, $year, $image, $pris, $director, $length, $plot, $imdb, $trailer, $filter);
$db->ExecuteQuery($sql, $params);
// Then save information on genre
$query="INSERT INTO RM_Movie2Genre(idRM_Movie,idRM_MovieGenre) values($id,?)";
foreach($genre as $val) {
$val_array=array($val);
$db->ExecuteQuery($query, $val_array);
}
$output = 'Informationen sparades';
}
// Select information on the movie
$sql = 'SELECT * FROM RM_Movie WHERE id = ?';
$params = array($id);
$res = $db->ExecuteSelectQueryAndFetchAll($sql, $params);
if(isset($res[0])) {
$movie = $res[0];
}
else {
die('Failed: There is no movie with that id');
}
在運行之前打印出SQL查詢。那麼你會發現什麼是錯的。如果你使用準備好的語句(看起來像),你可以使用'echo vsprintf(str_replace('?','\'%s \'',$ query),$ params)來僞造它;' – h2ooooooo 2014-09-27 17:49:41
你缺少字段'SET'後名:更新RM_Movie2Genre SET FIELD_NAME = ... – Ormoz 2014-09-27 17:51:41
@Ormoz我試圖用 $ db-> ExecuteQuery('UPDATE RM_Movie2Genre SET genre =(array($ val))WHERE id =?' ; ,但得到這個問題,而不是 警告:PDOStatement :: execute():SQLSTATE [HY093]:無效參數編號:沒有參數被綁定在... – 2014-09-28 14:41:57