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
Er hoeven toch geen aanhalingstekens om nombre, appellidos enz.
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'.
Probeer de error op te vangen.

try { 
    //code
} catch (PDOException $e) { 
    throw new pdoDbException($e); 
} 
zijn er records met id = $id

en wat is de waarde van de ingevulde kolommen vooraf?
is dat wel anders dan wat het moet worden?

stel x = 10 voor rij met id = 1;
UPDATE tabel
SET x = 11
WHERE id = 1;
>> affected rows = 1

UPDATE tabel
SET x = 11
WHERE id = 1;
>> affected rows = 0
er is namelijk niets veranderd in de database.
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.
Heb je bovenstaande code van Ivo P al uitgevoerd? Welke melding komt daaruit?
Dat er geen rijen zijn aangepast
als er geen rijen zijn aangepast dan

* 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.

Reageren