SQLSTATE [42000]: Syntaxisfout of toegangsovertreding: 1064 U hebt een fout in uw SQL SYNTAX – PHP – PDO [DUPLICEER]

Ik heb alle andere StackoverFlow (en Google) berichten met hetzelfde probleem bekeken, maar niemand leek mijn probleem aan te pakken.

Ik gebruik PDO en PHP.

Mijn code:

$vals = array(
   ':from'    => $email,
   ':to'      => $recipient,
   ':name'    => $name,
   ':subject' => $subject,
   ':message' = >$message
);
print_r($vals);
try {
   $pdo = new PDOConfig();
   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $sql = "SELECT * FROM messages WHERE `message` LIKE :message";
   $q = $pdo->prepare($sql);
   $q->execute(array(':message' => $vals[':message']));
   $resp = $q->fetchAll();
   foreach ($resp as $row) {
      throw new Exception('Please do not post the same message twice!');
   }
   $sql = "INSERT INTO messages (from, to, name, subject, message) VALUES (:from, :to, :name, :subject, :message)";
   $q = $pdo->prepare($sql);
   $q->execute($vals);
} 
catch(PDOException $e) {
   echo $e->getMessage();
}

en de eerste print_r geeft

Array ( [:from]    => [email protected] 
        [:to]      => [email protected] 
        [:name]    => abc 
        [:subject] => abc 
        [:message] => abc )

die wordt verwacht (geen is null)

Maar het geeft de fout op

SQLSTATE [42000]: Syntaxisfout of toegangsovertreding: 1064 U hebt een fout in uw SQL-syntaxis; Controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis om in de buurt van ‘van, naar, naam, onderwerp, bericht) te gebruiken (‘ [email protected] ‘,’ [email protected] ‘op regel 1

Geen idee hoe dit te repareren. Eventuele ideeën?


Antwoord 1, Autoriteit 100%

fromis een sleutelwoord in SQL. U mag het niet gebruiken als een kolomnaam zonder deze te citeren. In MySQL worden dingen zoals kolomnamen geciteerd met behulp van Backticks, d.w.z. `from`.

persoonlijk, ik zou niet de moeite nemen; Ik zou de kolom gewoon hernoemen.

PS. Zoals opgemerkt in de opmerkingen, is toeen ander SQL-trefwoord, zodat het ook moet worden geciteerd. Handig, de mensen bij Drupal.org onderhouden een lijst van gereserveerde woorden in SQL .


Antwoord 2, Autoriteit 30%

Ik heb deze exacte fout, maar in mijn geval was ik bindende waarden voor de LIMITClausule zonder het type op te geven. Ik laat dit hier gewoon laten vallen voor het geval iemand deze foutmelding krijgt om dezelfde reden. Zonder het type op te geven LIMIT :limit OFFSET :offset;resulteerde in LIMIT '10' OFFSET '1';in plaats van LIMIT 10 OFFSET 1;. Wat helpt om te corrigeren dat is het volgende:

$stmt->bindParam(':limit', intval($limit, 10), \PDO::PARAM_INT);
$stmt->bindParam(':offset', intval($offset, 10), \PDO::PARAM_INT);

Antwoord 3, Autoriteit 2%

ALTER TABLE `{$installer->getTable('sales/quote_payment')}`
ADD `custom_field_one` VARCHAR( 255 ) NOT NULL,
    ADD `custom_field_two` VARCHAR( 255 ) NOT NULL;

Voeg Backtick I.E. “` “goed toe. Schrijf uw getwijsbare naam en kolomnaam tussen Backtick.


Antwoord 4

Dezelfde PDO-fout in SQL-query terwijl u probeert in de database-waarde in te voegen van multidimentiële array:

$sql = "UPDATE test SET field=arr[$s][a] WHERE id = $id";
$sth = $db->prepare($sql);    
$sth->execute();

ARRACY PRACIFICEEREN arr[$s][a]VAN SQL-query, met behulp van in plaats daarvan variabele met het vastberaden het probleem.

Other episodes