Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误SQL查询php_Php_Sql - Fatal编程技术网

错误SQL查询php

错误SQL查询php,php,sql,Php,Sql,当我尝试用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

当我尝试用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
电影可以保存,但不能与类型一起保存。有谁知道这里出了什么问题吗?我知道它在更新的RM_Movie2Genre集合中(用粗体标记),但我看不出有什么不对

$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='SELECT*FROM RM_MovieGenre';
$genres=$db->ExecuteSelectQueryAndFetchAll($sql);
$sql='从RM_Movie2Genre中选择idRM_MovieGenre作为id,其中idRM_Movie=?';
$myGenres=$db->ExecuteSelectQueryAndFetchAll($sql,array($id),0,PDO::FETCH_COLUMN);
$selectOptionGenres=“”;
foreach($key=>$val的类型){
$selected=在数组中($val->id,$myGenres)?'selected':null;
$selectOptionGenres.=“{$val->name}”;
}
$selectOptionGenres.='';
//检查表格是否已提交
$output=null;
如果($save){
//首先保存有关电影的信息
$sql='1
更新RM_电影集
标题=?,
年份=?,
图像=?,
pris=?,
董事=?,
长度=?,
绘图=?,
imdb=?,
拖车=?,
过滤器=?
';
$params=array($title、$year、$image、$pris、$director、$length、$plot、$imdb、$trailer、$filter);
$db->ExecuteQuery($sql,$params);
//然后保存有关流派的信息
$query=“插入RM_Movie2Genre(idRM_Movie,idRM_MovieGenre)值($id,?)”;
foreach($val){
$val_数组=数组($val);
$db->ExecuteQuery($query,$val\u数组);
}
$output='Informationen-sparades';
}
//选择有关电影的信息
$sql='从RM_电影中选择*,其中id=?';
$params=数组($id);
$res=$db->ExecuteSelectQueryAndFetchAll($sql,$params);
如果(isset($res[0])){
$movie=$res[0];
}
否则{
die('失败:没有具有该id的电影');
}

我想您希望使用以下内容更改行的值:

 $id=$params[10];
我认为一个id有多种类型,并将其存储在RM_Movie2Genre表中。如果是这种情况,您应该使用
INSERT
query。但首先,您应该删除旧值:

   $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'";

这段代码对create和edit都很有效。谢谢大家带我去那里!:-)

//获取所有类型并选择应选择的类型
$sql='SELECT*FROM RM_MovieGenre';
$genres=$db->ExecuteSelectQueryAndFetchAll($sql);
$sql='从RM_Movie2Genre中选择idRM_MovieGenre作为id,其中idRM_Movie=?';
$myGenres=$db->ExecuteSelectQueryAndFetchAll($sql,array($id),0,PDO::FETCH_COLUMN);
$selectOptionGenres=“”;
foreach($key=>$val的类型){
$selected=在数组中($val->id,$myGenres)?'selected':null;
$selectOptionGenres.=“{$val->name}”;
}
$selectOptionGenres.='';
//检查表格是否已提交
$output=null;
如果($save){
//首先保存有关电影的信息
$sql='1
更新RM_电影集
标题=?,
年份=?,
图像=?,
pris=?,
董事=?,
长度=?,
绘图=?,
imdb=?,
拖车=?,
过滤器=?
哪里
id=?
';
$params=array($title、$year、$image、$pris、$director、$length、$plot、$imdb、$trailer、$filter、$id);
$db->ExecuteQuery($sql,$params);
//然后保存有关流派的信息
$query=“插入RM_Movie2Genre(idRM_Movie,idRM_MovieGenre)值($id,?)”;
foreach($val){
$val_数组=数组($val);
$db->ExecuteQuery($query,$val\u数组);
}
$output='Informationen-sparades';
}
//选择有关电影的信息
$sql='从RM_电影中选择*,其中id=?';
$params=数组($id);
$res=$db->ExecuteSelectQueryAndFetchAll($sql,$params);
如果(isset($res[0])){
$movie=$res[0];
}
否则{
die('失败:没有具有该id的电影');
}

在运行SQL查询之前打印出来。到时候你就会知道出了什么问题。如果您使用准备好的语句(看起来像),您可以通过使用
echo vsprintf(str_replace('?','\'%s\',$query),$params)来伪造它在“SET”之后缺少字段名:UPDATE RM_Movie2Genre SET field_name=…@Ormoz我试图用$db->ExecuteQuery更新它('UPDATE RM_Movie2Genre SET genre=(array($val))其中id=?');但是却出现了这个问题警告:PDOStatement::execute():SQLSTATE[HY093]:参数编号无效:没有参数绑定到…@H2Oooooo我该怎么做?@MiaRaunegger更改您的
ExecuteQuery
方法。我对更新电影和插入新电影使用相同的文件,所以先删除这些信息不是个好主意。我尝试了你关于插入和更新的建议,但结果是所有其他电影都被删除并替换为更新/插入的电影。Id是数字。我更新了上面的myc代码并提供了更多信息。您在查询中遗漏了
where子句
$sql='UPDATE RM_Movie SET title=?,year=?,image=?,pris=?,director=?,length=?,plot=?,imdb=,trail=,filter=?'。它显然会更新所有记录!您不能在一个文件中更新和插入电影,同时使用“删除查询”更新类型。事实上,这种方式是更新流派的最简单方式。使用更新查询更新流派需要更复杂的编码。你不能只用一个更新查询来更新流派。所以,最好还是坚持删除和更新流派。(请注意,您正在删除类型,而不是电影本身)
// 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');
}