Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Bloß das du keine Null werte übergibt sondern für die Spalte ein Default gepflegt ist.
Quellcode |
|
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 |
mysql> CREATE TABLE TEST_TB ( -> ID INTEGER AUTO_INCREMENT PRIMARY KEY, -> BALANCE INTEGER NOT NULL, -> SALARY INTEGER NOT NULL -> ); Query OK, 0 rows affected (0.37 sec) mysql> DESC TEST_TB; +---------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------+------+-----+---------+----------------+ | ID | int(11) | NO | PRI | NULL | auto_increment | | BALANCE | int(11) | NO | | NULL | | | SALARY | int(11) | NO | | NULL | | +---------+---------+------+-----+---------+----------------+ 3 rows in set (0.06 sec) mysql> INSERT INTO TEST_TB (BALANCE) VALUES (1000); Query OK, 1 row affected, 1 warning (0.08 sec) mysql> SHOW WARNINGS; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1364 | Field 'SALARY' doesn't have a default value | +---------+------+---------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT * FROM TEST_TB; +----+---------+--------+ | ID | BALANCE | SALARY | +----+---------+--------+ | 1 | 1000 | 0 | +----+---------+--------+ 1 row in set (0.00 sec) |
Zitat
BOOL, BOOLEAN
These types are synonyms for TINYINT(1). A value of zero is considered false. Nonzero values are considered true
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> CREATE TABLE IF NOT EXISTS TEST_TB ( -> BOOLS BOOLEAN NOT NULL -> ); Query OK, 0 rows affected (4.02 sec) mysql> DESC TEST_TB; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+-------+ | BOOLS | tinyint(1) | NO | | NULL | | +-------+------------+------+-----+---------+-------+ 1 row in set (0.01 sec) |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
mysql> INSERT INTO TEST_TB VALUES (TRUE), (FALSE), (1), (0), (42), (-42); Query OK, 6 rows affected (0.09 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM TEST_TB; +-------+ | BOOLS | +-------+ | 1 | | 0 | | 1 | | 0 | | 42 | | -42 | +-------+ 6 rows in set (0.00 sec) |
Zitat
Nonzero values are considered true
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> SELECT -> BOOLS, -> IF(BOOLS = TRUE, "TRUE!", "FALSE!") TEST -> FROM TEST_TB; +-------+--------+ | BOOLS | TEST | +-------+--------+ | 1 | TRUE! | | 0 | FALSE! | | 1 | TRUE! | | 0 | FALSE! | | 42 | FALSE! | | -42 | FALSE! | +-------+--------+ 6 rows in set (0.00 sec) |
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
mysql> CREATE TABLE TEST_TB ( -> ID INTEGER AUTO_INCREMENT PRIMARY KEY, -> VALUE INTEGER NOT NULL -> ); Query OK, 0 rows affected (0.30 sec) mysql> INSERT INTO TEST_TB (VALUE) VALUES (0), (1), (42); Query OK, 3 rows affected (0.08 sec) Records: 3 Duplicates: 0 Warnings: 0 |
Quellcode |
|
1 2 3 4 5 6 7 |
mysql> SELECT * FROM TEST_TB WHERE VALUE = "APFELKUCHEN"; +----+-------+ | ID | VALUE | +----+-------+ | 1 | 0 | +----+-------+ 1 row in set, 1 warning (0.03 sec) |
Quellcode |
|
1 2 3 4 5 6 7 |
mysql> SHOW WARNINGS; +---------+------+-------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: 'APFELKUCHEN' | +---------+------+-------------------------------------------------+ 1 row in set (0.00 sec) |
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Aber ansonsten stimme ich soweit zu, bei Fehlern durch eine falsche Verwendung sollten standardmäßig auch Fehlermeldungen ausgegeben werden. Allerdings merkt man an der Formulierung schon, dass diese Fehler eben nur durch eine falsche Verwendung auftreten. In seiner Anwendung weiß man, wie die Struktur der Datenbank aussieht und weiß somit auch, welche Werte gültig und ungültig sind. Ein String ist einfach keine Zahl und somit liegt beim Apfelkuchen bereits eine falsche Verwendung vor.
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Mal ganz abgesehen davon, dass man mit einer solchen Vorgehensweise sich Sicherheitslücken reinholen kann.
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
public function doesUserExist($username) { $stmt = $this->pdo->prepare('SELECT COUNT(*) FROM USERS_TB WHERE NAME = ?'); if($stmt->execute(array($username))) { return $stmt->fetchColumn() > 0; } else { // Handle Errors... } } |
Rein theoretisch wäre es hier am saubersten, das Statement an die DB zu schicken, und eine eventuelle Fehlermeldung seitens der DB abzufangen und dem Nutzer zurückzugeben.
Mal ganz abgesehen davon, dass man mit einer solchen Vorgehensweise sich Sicherheitslücken reinholen kann.
Wird von Prepared Statements abgedeckt.
Quellcode
1 2 3 4 5 6 7 8 9 public function doesUserExist($username) { $stmt = $this->pdo->prepare('SELECT COUNT(*) FROM USERS_TB WHERE NAME = ?'); if($stmt->execute(array($username))) { return $stmt->fetchColumn() > 0; } else { // Handle Errors... } }
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Rein theoretisch wäre es hier am saubersten, das Statement an die DB zu schicken, und eine eventuelle Fehlermeldung seitens der DB abzufangen und dem Nutzer zurückzugeben.
Das soll Ironisch sein oder? Wo ist es bitte denn am saubersten einfach ein Statement an die DB zu schicken?
Werbeanzeige