сохранение в базе данных mysql с использованием php и mysqli - PullRequest
0 голосов
/ 08 октября 2009

Я пытаюсь сохранить данные в базе данных и получаю сообщение об ошибке, которого раньше никогда не видел у меня есть догадка, это как-то связано с сопоставлением БД, но я не уверен, что не так,

вот запрос:

$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: 1009 *: //www.something/here/here/here/12345,httpwwwsomthighere

сопоставление базы данных для этих полей - utf8-general-ci, а тип поля - varchar 255

есть идеи на этот счет?

1 Ответ

1 голос
/ 08 октября 2009

Если вы делаете это таким образом, вам все равно придется заключать в кавычки строки (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();
...