Goedendag,
In mijn laatste topic werd ik erop gewezen dat mysql binnen kort niet meer werkzaam zal zijn. Hierom ben ik bezig al mijn codes (database gericht) opnieuw te schrijven. Alleen loop ik nu vast op een update gedeelte van de users.
Ik heb een function gemaakt in deze functie is het van belang dat je de update gegevens en de userid mee stuurt.
De update gegevens is een een array met daarin de colomnaam plus de nieuwe date
array('U_NAME' => "test","
U_MAIL" => "blabla@blalbal.nl",
'U_ACTIEF' => true)
Nu is het de bedoeling dat PDO alleen de colommen update die mee gestuurd zijn via de array alleen ik blijf een error krijgen
Regel nummer 78 is:
Mn functie:
En de array die uitgepoept wordt door $execute_array
en de $query is:
Update:
Inmiddels opgelost, had geen array_push moeten gebruiken maar gebruik moeten maken van $execute_array[]
In mijn laatste topic werd ik erop gewezen dat mysql binnen kort niet meer werkzaam zal zijn. Hierom ben ik bezig al mijn codes (database gericht) opnieuw te schrijven. Alleen loop ik nu vast op een update gedeelte van de users.
Ik heb een function gemaakt in deze functie is het van belang dat je de update gegevens en de userid mee stuurt.
De update gegevens is een een array met daarin de colomnaam plus de nieuwe date
array('U_NAME' => "test","
U_MAIL" => "blabla@blalbal.nl",
'U_ACTIEF' => true)
Nu is het de bedoeling dat PDO alleen de colommen update die mee gestuurd zijn via de array alleen ik blijf een error krijgen
code:
1
| "SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\xampp\htdocs\****\mysql_test.php:78 Stack trace: #0 C:\xampp\htdocs\****\mysql_test.php(29): UpdateUser(1, Array) #1 {main} thrown in C:\xampp\htdocs\**\mysql_test.php on line 78" |
Regel nummer 78 is:
code:
1
| throw new Exception('Er is iets fout gegaan tijdens account activatie' . $e->getMessage()); |
Mn functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| function UpdateUser($U_ID,$rows) { if(!empty($U_ID) or !empty($rows)) { if( preg_match("/[0-9]/",$U_ID)) { if(is_array($rows)) { $sql_update_data = ""; $execute_array = ""; foreach ($rows as $key => $value) { if($sql_update_data == "") { $sql_update_data = $key . " = :". $key; }else { $sql_update_data = $sql_update_data .", ". $key . " = :".$key; } if(!is_array($execute_array)) { $execute_array = array(":".$key => $value); }else{ array_push($execute_array,":".$key , $value); } } array_push($execute_array,":U_ID", $U_ID); $query = "UPDATE users SET ".$sql_update_data." WHERE U_ID=:U_ID"; //var_dump ( array(':U_ID' => $U_ID , ':U_HASH' => "gfhdh","U_IP" => "3resgfg")); //echo "<br></br>"; //var_dump($execute_array); try { global $db_connection; $db = $db_connection->prepare($query); $db->execute($execute_array); } catch(PDOException $e) { throw new Exception('Er is iets fout gegaan tijdens account activatie' . $e->getMessage()); return ""; } }else{ //rows is geen array throw new Exception('Gewzijzigde data is geen array'); } }else{ //userId is geen nummer throw new Exception('Opgegeven ID klopt niet'); } }else { //function vars zijn leeg throw new Exception('pgegeven variabele zijn leeg'); } } |
En de array die uitgepoept wordt door $execute_array
code:
1
| array(7) { [":U_NAME"]=> string(4) "test" [0]=> string(7) ":U_MAIL" [1]=> string(17) "blabla@blalbal.nl" [2]=> string(9) ":U_ACTIEF" [3]=> bool(true) [4]=> string(5) ":U_ID" [5]=> int(1) } |
en de $query is:
code:
1
| UPDATE users SET U_NAME = :U_NAME, U_MAIL = :U_MAIL, U_ACTIEF = :U_ACTIEF WHERE U_ID=:U_ID |
Update:
Inmiddels opgelost, had geen array_push moeten gebruiken maar gebruik moeten maken van $execute_array[]
[ Voor 3% gewijzigd door Jboy1991 op 30-04-2017 15:35 ]