Ik heb vanalles nagezocht, maar krijg niet gevonden waarom de query niet werkt. Dit is wat ik heb:
//Connect to the dBase
require_once ('link to de dBase-connectionFile');
$sql_update = "UPDATE socios
SET 'nombre' = :nombre,
'apellidos' = :apellidos,
'socio' = :socio,
'email' = :email,
'dni' = :dni
WHERE
'id' = $id";
$stmt = $db->prepare($sql_update);
$stmt->execute(array(':nombre'=>$nombre,
':apellidos'=>$apellidos,
':socio'=>$socio,
':email'=>$email,
':dni'=>$dni));
if($stmt->rowCount() == 0) {
throw new PDOException ('Er zijn geen rijen gewijzigd in de UPDATE query');
}
De foutmelding geeft:
"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; near:''nombre' = 'XXXX', 'apellidos' = 'XXX XXX', 'socio' = '00' at line 3"
Ik kom er niet uit
Ik heb ze weggehaald en inderdaad, de PDOerror is nu opgelost, maar de update is niet uitgevoerd, want krijg nu de melding: 'Er zijn geen rijen gewijzigd in de UPDATE query'.
De foutmelding die ik nu krijg is uit de "if($stmt->rowCount() == 0) (regel 17 in de code hierbboven)
Daaronder heb ik een catch met de gebruikelijke PDOexceptions, waar ik de vorige foutmeldimng vandaan had. Dus daar wordt nu geen fout gegenereerd.
[size=xsmall]Toevoeging op 22/08/2014 11:50:17:[/size]
Oke, ik haal eerst de record op en stop die gegevens in een formulier. Dit werkt. In het formulier heb ik ook een hidden field (voor nu even zichtbaar) waar ik de id (autoincrement) uit de tabel in stop. Ook dit werkt. Ik zie alles goed opgehaald. Vervolgens wijzig ik één veld, (bv. nombre), maar deze wijziging wordt dus niet doorgevoerd. (voor de volledigheid heb ik ook de gegevens gecontroleerd in phpmyadmin). Kan het zijn dat ik iets niet goed doe met de $id, die heb ik weer terug opgehaald uit het formulier met $_POST['id']
op zich is het natuurlijk niet een fout of een exception (voor php) dat de query 0 rijen aanpast.
Als de query een fout oplevert, dan wel.
<?php
$gelukt = $stmt->execute( ... );
if(!$gelukt) {
echo 'query is mislukt: <pre>';
print_r($stmt->errorInfo();
echo '</pre>';
}
else {
if($stmt->rowCount() == 0) {
echo 'er zijn geen rijen aangepast, maar dit is geen echte fout';
}
Dat klopt. Daarom lijkt het alsof er niets mis is met de syntax, maar deze query zou wél een update van de gegevens uit moet voeren. En dat doet ie niet, maar ik snap niet waarom niet.
* is de query dus qua syntax goed
* matcht alles met bestaande kolommen en tabelnamen
* heb je connectie met de database
Dat er niets is aangepast:
* er zijn geen rijen die voldoen aan de wHERE-eisen: id = $id
* er zijn wel records, maar daaraan is in feite niets aangepast.
geef je huidige script (zoals in de openingspost) nog eens.