mysql - 'ER_PARSE_ERROR' 因为 ?在使用 MySQL 的 url 参数中

标签 mysql sql node.js forms parsing

使用 Loopback/NodeJs 并尝试创建一个方法来插入多部分表单,在添加包含“?”的 YouTube 链接时出现此错误在形式中任何建议可以避免此错误,因为到目前为止我可以插入不带“?”的链接而且安全性也很差。

这是我迄今为止构建的代码:

cm_comediens_extraits_video.postVideo = function (titre, description, typeExtrait, langue, intention1, intention2, intention3, lienYoutube, options, req, res, file, cb) {
const token = options && options.accessToken;
const userId = token && token.userId;
var ds = app.datasources.mydb;

let newpath = '';
let fileName = '';
const form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
  var oldpath = files.file.path;
  fileName = files.file.name;
  titre = fields.titre;
  description = fields.description;
  typeExtrait = fields.typeExtrait;
  langue = fields.langue;
  intention1 = fields.intention1;
  intention2 = fields.intention2;
  intention3 = fields.intention3;
  lienYoutube = fields.lienYoutube;
  console.log(lienYoutube)
  newpath = 'public/videos/' + fileName;
  //  console.log(files.file)
  fs.copyFile(oldpath, newpath, function (err) {
    fs.unlinkSync(oldpath)
    if (err) throw err;
  });  


var sql = "INSERT INTO cm_medias (id_comedien,type_media,intitule,filename,original_filename) VALUES ((SELECT id_comedien FROM cm_comediens WHERE id_utilisateur= '" + userId + "'),'video','"+titre+"','"+'http://localhost:3000/'+fileName+"','"+fileName+"')";
var sql2 = "INSERT INTO cm_comediens_extraits_video (id_media,description,qf_type,qf_langue,qf_interpretation1,qf_interpretation2,qf_interpretation3,lien_youtube) VALUES ((select max(cm_medias.id_media) as id_media from cm_medias inner join cm_comediens on cm_medias.id_comedien=cm_comediens.id_comedien inner join user on cm_comediens.id_utilisateur= user.id where user.id= '" + userId + "'),'" + description + "','" + typeExtrait + "','" + langue + "','" + intention1 + "','" + intention2 + "','" + intention3 + "','"+ lienYoutube +"')";
ds.connector.execute(sql, [titre], function (err, cm_comediens_extraits_videos) {
    ds.connector.execute(sql2, [description, typeExtrait, langue, intention1, intention2, intention3, lienYoutube], function (err, cm_comediens_extraits_videos) {
  if (err) console.error(err);
  cb(err, cm_comediens_extraits_videos);
    });
    });  
    });    
  };

  cm_comediens_extraits_video.remoteMethod(
    'postVideo', {
      http: {verb: 'POST'},
      description: 'Add a Video',
      accepts: [
                 { arg: 'titre', type: 'string' },
                { arg: 'description', type: 'string' },
                { arg: 'typeExtrait', type: 'integer' },
                { arg: 'langue', type: 'integer' },
                { arg: 'intention1', type: 'integer' },
                { arg: 'intention2', type: 'integer' },
                { arg: 'intention3', type: 'integer' },
                { arg: 'lienYoutube', type: 'string' },
                { arg: "options", "type": "object", "http": "optionsFromRequest"},
                { arg: 'req', type: 'object', 'http': {source: 'req'}},
                { arg: 'res', type: 'object', 'http': {source: 'res'}},
                { arg: 'file', type: 'file' }  
      ],
      returns: {arg: 'data',type: ['cm_comediens_extraits_video'],root: true}
    }
  );

这是错误的示例。这 ”?”我认为 YouTube 被认为是下一个参数:

  code: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlMessage:
   'Erreur de syntaxe près de \'://www.youtube.com/watchv=V`vcvcvcvcvcvc`MiSnR9frEg)\' à la ligne 1',
  sqlState: '42000',
  index: 0,

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

这里有一个错误:'"+titre+"','"+'http://localhost:3000/' 简单地删除引号或转义它们: '"+titre+"','"http://localhost:3000/"'

关于mysql - 'ER_PARSE_ERROR' 因为 ?在使用 MySQL 的 url 参数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359897/

相关文章:

mysql - 合并两个使用不同时间范围的最小/最大/平均值查询

php - 无法在 Hostgator 中上传大于 1Mb 左右的文件

bash - 在命令中使用多个字符串定界符会导致 mysql 客户端/bash 脚本出现解析问题

mysql - 如何选择同一列中出现的相同 ID 值?

javascript - expo AsyncStorage 方法不是函数

javascript - 如何让 Javascript 将通过 AJAX 请求提取的 tinyint(1) 数据视为 boolean 值?

sql - 在 PostgreSQL 中组合两个 SELECT 查询

mysql - 获取 session 的最新注册信息

javascript - 如何将 LiveReload 与 AngularJS 模板 URL 一起使用

android - 建立 Node.Js 本地服务器(localhost : 8888) on WiFi though WiFi Router (Passing it through LAN to WiFi Router)?