2009-10-08 8 views
0

je suis en train d'enregistrer des données à la base de données et j'obtiens une erreur je n'ai jamais vu avant j'ai une intuition, il a quelque chose à voir avec la collation db mais je ne suis pas sûr de quoi mal,enregistrer à la base de données mysql en utilisant php et mysqli

ici est la requête:

$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; 

le message d'erreur que je reçois est:

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité « : //www.something/here/here/here/12345,httpwwwsomthighere » à la ligne 1

classement de la base

pour ces champs est utf8-general-ci et le type de champ est varchar 255

des idées là-dessus?

Répondre

1

Si vous le faites de cette façon, vous devez toujours mettre des guillemets autour des chaînes (url et normalizedurl). C'est le problème de la syntaxe auquel il fait référence. Cela étant triste, ce n'est pas la manière recommandée de passer des paramètres avec mysqli. Le point entier de mysqli est qu'il a un paramétrage de requête. Par exemple:

$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(); 
+0

Merci pour cette Cletus si je pouvais, je pop « vous venez de gagner le badge GURU » sur votre écran :) comme toujours vos réponses sont détaillées et précises –

Questions connexes