在此select语句中,我的语法错误在哪里?

时间:2019-06-26 12:52:44

标签: php mysqli

我在使我感到困惑的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行的')'附近使用正确的语法

1 个答案:

答案 0 :(得分:0)

您应该开始使用准备好的语句,而不要使用sprintf并转义分开。另外,您的查询中可能有保留字,例如name-尝试在列名周围使用反引号,以免造成混淆。查询看起来可能像这样:

insert into `characters` (`name`, `metatype`, `user_id`) values('Test 45','human',5);

最后,您的问题可能毕竟与PHP或MySQLi无关-尝试先在MySQL Shell中运行查询以检查其是否有效