Chris
Chris

Reputation: 429

PDO update statement not updating record

I was just wondering if I could get some pointers as to where I may be going wrong.

I have been using mysql statements and I am in the process of switching to PDO statements to use with MySQL.

I have been able to get my head around SELECT statements, but I am having a bit of trouble trying to get the insert statement to work.

I have been Googling and tried a couple of different ways to get this to work but to no avail.

This is what I have so far:

$sqlu = $conn->prepare("UPDATE ".PERSON." p
                    JOIN contact c ON c.personID = p.adbkid 
                    JOIN address a ON a.personID = p.adbkid 
                    JOIN misc m ON m.personID = p.adbkid
                    JOIN variables v ON v.personID = p.adbkid
                    SET lastname = :ln
                    WHERE p.pid = :id");

            $sqlu->bindParam(':ln', $ln, PDO::PARAM_STR);
            $sqlu->bindParam(':id', $id, PDO::PARAM_STR);

            $sqlu->execute();

I have also tried it without using bindParam and using as follows:

$sqlu->execute(array('ln' => $ln, 'id' => $id));

I have also used a '?' instead of ':' and then bound the parameter or used it in the array.

When I hit the update button, I have echoed the query so I can see what is being passed through and this is what I get:

PDOStatement Object ( [queryString] => UPDATE person p JOIN contact c ON c.personID = p.adbkid JOIN address a ON a.personID = p.adbkid JOIN misc m ON m.personID = p.adbkid JOIN variables v ON v.personID = p.adbkid SET lastname = :ln WHERE p.pid = :id ) 1

I just can't see where I am going wrong. Like I say, I have Googled this and come across some answers on here too and I seem to be stuck as to where to go next.

This is a personal project I am working on and I am not looking for someone to figure this out for me, I am just looking for some pointers so I can try to fix and learn myself.

Thanks in advance.

Upvotes: 0

Views: 49

Answers (2)

Chris
Chris

Reputation: 429

I have gone through everything and it would appear that the echoing of the query is showing the query with the placeholders and it is actually updating the database.

Upvotes: 0

Gordon Linoff
Gordon Linoff

Reputation: 1269563

One possibility is that the records do not have matching records in all the tables. You could try using left join. But why are you doing joins at all? Does this work?

UPDATE ".PERSON." p
   SET lastname = :ln
   WHERE p.pid = :id;

This assumes that lastname is in the Person table, but that seems like a reasonable assumption.

Upvotes: 1

Related Questions