mysqli准备的带有设置变量的语句

时间:2018-12-31 09:47:28

标签: php mysql mysqli

我正在尝试运行正在创建数据透视表的查询。该查询在PHP之外可以很好地运行,但是在 {   “CanDTO": [     {       "id": "",       “canId": "3",       "unitId": "3"   }, {       "id": "",       “canId": "3",       "unitId": "3"   },     {       "id": "",       “canId": "4", "unitId": "3" }  ],   "id": "",   "Date": "01/01/2019",   "notes": "" }

中出现PHP错误
  

SQL错误#:1064-您的SQL语法有错误;检查   与您的MySQL服务器版本相对应的手册   'SET @sql = CONCAT ...附近使用的语法...

没有(希望)深入查询的细节,是否有关于将值分配给变量(例如func postmethod() { let params = TotalcanDTO.init(CanDTO: CanDTO.init(id: “”,canId: 3,unitId: 3,), id:””, Date: 01/01/2019, notes: "") guard let uploadData = try? JSONEncoder().encode(params) else { return } let url = URL(string: "\(ApiManager.url)canApp/saveCanDetailsApp")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in if let error = error { print ("error: \(error)") return } guard let response = response as? HTTPURLResponse, (200...299).contains(response.statusCode) else { print ("server error") return } if let mimeType = response.mimeType, mimeType == "application/json", let data = data, let dataString = String(data: data, encoding: .utf8) { print ("got data: \(dataString)") } } task.resume() } )的事情,在这里需要一种替代语法来与mysqli->prepare()一起使用?如果我从SET @sql向下删除所有内容,它将不再阻塞mysqli

SET @sql

1 个答案:

答案 0 :(得分:1)

问题是您试图在单个prepare语句中运行多个查询。

您需要为每个查询使用不同的变量创建单独的prepare语句。

定义

  

准备SQL查询,并返回要用于的语句句柄   对该声明进行进一步的操作。查询必须包含   一条SQL语句。

来源:http://us3.php.net/manual/en/mysqli.prepare.php