当我试图用som moviegenres更新数据库时,我遇到了这个错误。
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');
}
我想您想用更改行的值
$id=$params[10];
我认为一个id有多个流派,并将其存储在RM_Movie2Genre表中。如果是这种情况,您应该使用INSERT
查询。但首先,您应该删除旧值:
$query="DELETE FROM RM_Movie2Genre where id=?";
$val_array=array($id);
$db->ExecuteQuery($query, $val_array);
现在,对于插入,如果$id是数字,请使用以下查询:
$query="INSERT INTO RM_Movie2Genre(id,genre) values($id,?)";
否则,如果是字符串类型,则应使用单引号将$id括起来:
$query="INSERT INTO RM_Movie2Genre(id,genre) values('$id',?)";
最后:
foreach($genre as $val) {
$val_array=array($val);
$db->ExecuteQuery($query, $val_array);
}
我认为UPDATE
没有任何意义,因为使用更新查询,您要多次更新一行,这是无用的。无论如何,如果你仍然认为你应该update
查询,那么用这个来更改$query
:
$query="UPDATE RM_Movie2Genre SET genre = ? WHERE id =$id";
如果是字符串类型:
$query="UPDATE RM_Movie2Genre SET genre = ? WHERE id ='$id'";
这段代码对创建和编辑都很好。谢谢大家把我带到那里!:-)
// 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 = ?
WHERE
id = ?
';
$params = array($title, $year, $image, $pris, $director, $length, $plot, $imdb, $trailer, $filter, $id);
$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');
}