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 構文にエラーがあります。1行目の「://www.something/here/here/here/12345,httpwwwsomthighhere」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

このフィールドのデータベース照合は 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 に答える