我在使我感到困惑的sql插入语句上收到语法错误。插入实际上发生了,但是错误使其余过程停止了。
服务器正在运行PHP 5.6.35,而我正在使用mysqli 5.5.59。我还有其他类似方式写的插件,可以按预期工作。
服务器端:
insert into characters (name, metatype, user_id) values('Test 45','human',5);
随着代码回显sql字符串,我得到:
$db = new mysqli('localhost', '******', '******', '******');
$charName = $_POST['charName'];
$metatype = $_POST['metatype'];
$user_id = $_POST['user_id'];
$sqlStatement = $db->prepare("insert into `characters` (`name`, `metatype`, `user_id`) values(?,?,?)");
$sqlStatement->bind_param("ssi", $charName, $metatype, $user_id);
$result = $sqlStatement->execute();
if($result == false)
{
echo 'Error Inserting to Database: '.mysqli_error($db);
http_response_code(500);
return;
}
其次:
错误插入数据库:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册 在第1行的')'附近使用正确的语法
返回字符列表,包括新字符。
在数据库列上,名称和元类型是utf8文本类型,而user_id是整数。
关于重复标记:
我看不到这是链接问题的重复形式。我正在使用另一种方法来创建该语句,并且该语句实际上在mysqli之外的所有内容上运行都没有错误(在技术上仍在运行)。给出的答案是相同的:“只使用准备好的语句”,实际上并没有回答问题。我知道它们是高级的,但据我所知,我使用的方法并未在php中弃用,并且仍然可以使用。
更新:
切换到预备语句也会产生此错误。 代码:
combidat <- combidat[which(!is.na(combidat$ID)),]
响应:
错误插入数据库:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在第1行的')'附近使用正确的语法
答案 0 :(得分:0)
您应该开始使用准备好的语句,而不要使用sprintf
并转义分开。另外,您的查询中可能有保留字,例如name
-尝试在列名周围使用反引号,以免造成混淆。查询看起来可能像这样:
insert into `characters` (`name`, `metatype`, `user_id`) values('Test 45','human',5);
最后,您的问题可能毕竟与PHP或MySQLi无关-尝试先在MySQL Shell中运行查询以检查其是否有效