0

我正在尝试将数据保存到数据库中,但我得到了一个我从未见过的错误,我有预感它与 db 排序规则有关,但我不确定出了什么问题,

这是查询:

$query1 = "INSERT INTO scape.url (url,normalizedurl,service,idinservice) VALUES (url, normalizedurl, 4, 45454)";
$query = "INSERT INTO scape.url (url, normalizedurl, service, idinservice) VALUES ("
            .$sql->real_escape_string($this->url).","
            .$sql->real_escape_string($this->normalizedUrl).","
            .$sql->real_escape_string($this->service).","
            .$sql->real_escape_string($this->idInService).")";
$result = $sql->query($query);
echo $sql->error;

我得到的错误信息是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '://www.something/here/here/here/12345,httpwwwsomthighere' 附近使用正确的语法

此字段的数据库排序规则为 utf8-general-ci,字段类型为 varchar 255

有什么想法吗?

4

1 回答 1

1

如果您这样做,您仍然需要在字符串(url 和 normalizedurl)周围加上引号。这就是它所指的语法问题。

可悲的是,这不是用 mysqli 传递参数的推荐方式。mysqli 的全部意义在于它具有查询参数化。例如:

$mysqli = new mysqli($host, $user, $password, $database);
if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit;
}
$sql = <<<END
INSERT INTO scape.url (url,normalizedurl,service,idinservice)
VALUES (?, ?, ?, ?)
END;
$stmt = $mysqli->prepare($sql);
if ($stmt === false) {
  printf("Error executing %s: %s\n", $sql, $stmt->error);
  exit;
}
$stmt->bind_param('ssii', $this->url, $this->normalizedUrl,
  $this->service, $this->idInService);
$stmt->execute();
于 2009-10-08T01:54:43.997 回答