1
|
$name = $_POST['name'];
$mysqli->query("SELECT * FROM myTable WHERE name='$name'");
|
2
|
' OR '1'='1
|
3
|
1=1
|
4
|
DELETE
|
5
|
SELECT * FROM myTable WHERE name='' OR '1'='1'
|
6
|
$name = $mysqli->real_escape_string($_POST['name']);
$mysqli->query("SELECT * FROM myTable WHERE name='$name'");
|
7
|
addcslashes($escaped, '%_')
|
8
|
mysqli::real_escape_string
|
9
|
(int)$mysqli->real_escape_string($_POST['name'])
|
10
|
(int)$_POST['name']
|
11
|
name
|
12
|
(int)$var
|
13
|
default_charset = "utf-8"
|
14
|
$mysqli->set_charset('utf8mb4')
|
15
|
$mysqli->real_escape_string()
|
16
|
real_escape_string()
|
17
|
$stmt = $mysqli->prepare("SELECT * FROM myTable WHERE name = ? AND age = ?");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
//fetching result would go here, but will be covered later
$stmt->close();
|
18
|
myTable
|
19
|
age
|
20
|
?
|
21
|
bind_param()
|
22
|
s
|
23
|
i
|
24
|
$stmt->execute()
|
25
|
mysqli_connect.php
|
26
|
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
|
27
|
$mysqli = new mysqli("localhost", "username", "password", "databaseName");
if($mysqli->connect_error) {
exit('Error connecting to database'); //Should be a message a typical user could understand in production
}
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli->set_charset("utf8mb4");
|
28
|
$mysqli->connect_error()
|
29
|
exit()
|
30
|
die()
|
31
|
exit('Something weird happened')
|
32
|
utf-8
|
33
|
utf8mb4
|
34
|
display_errors = Off
|
35
|
log_errors = On
|
36
|
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$mysqli = new mysqli("localhost", "username", "password", "databaseName");
$mysqli->set_charset("utf8mb4");
} catch(Exception $e) {
error_log($e->getMessage());
exit('Error connecting to database'); //Should be a message a typical user could understand
}
|
37
|
try/catch
|
38
|
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
set_exception_handler(function($e) {
error_log($e->getMessage());
exit('Error connecting to database'); //Should be a message a typical user could understand
});
$mysqli = new mysqli("localhost", "username", "password", "databaseName");
$mysqli->set_charset("utf8mb4");
|
39
|
mysqli_report()
|
40
|
$mysqli->connect_error
|
41
|
new mysqli()
|
42
|
$e->getMessage()
|
43
|
$e
|
44
|
set_exception_handler()
|
45
|
$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
$stmt->close();
|
46
|
$stmt = $mysqli->prepare("UPDATE myTable SET name = ? WHERE id = ?");
$stmt->bind_param("si", $_POST['name'], $_SESSION['id']);
$stmt->execute();
$stmt->close();
|
47
|
$stmt = $mysqli->prepare("DELETE FROM myTable WHERE id = ?");
$stmt->bind_param("i", $_SESSION['id']);
$stmt->execute();
$stmt->close();
|
48
|
$stmt = $mysqli->prepare("UPDATE myTable SET name = ?");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
if($stmt->affected_rows === 0) exit('No rows updated');
$stmt->close();
|
49
|
mysqli::$affected_rows
|
50
|
execute()
|
51
|
UPDATE
|
52
|
WHERE
|
53
|
mysqli_result::$num_rows
|
54
|
SELECT
|
55
|
$mysqli->affectedRows
|
56
|
$stmt = $mysqli->prepare("UPDATE myTable SET name = ?");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
$stmt->close();
echo $mysqli->info;
|
57
|
Rows matched: 1 Changed: 0 Warnings: 0
|
58
|
mysqli->info
|
59
|
preg_match_all('/(\S[^:]+): (\d+)/', $mysqli->info, $matches);
$infoArr = array_combine ($matches[1], $matches[2]);
var_export($infoArr);
|
60
|
['Rows matched' => '1', 'Changed' => '0', 'Warnings' => '0']
|
61
|
$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
echo $mysqli->insert_id;
$stmt->close();
|
62
|
$mysqli->errno
|
63
|
$e->getCode()
|
64
|
$mysqli->sqlstate
|
65
|
try {
$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $_POST['name'], $_POST['age']);
$stmt->execute();
$stmt->close();
} catch(Exception $e) {
if($mysqli->errno === 1062) echo 'Duplicate entry';
}
|
66
|
ALTER TABLE myTable ADD CONSTRAINT unique_person UNIQUE (name, age)
|
67
|
get_result()
|
68
|
bind_result()
|
69
|
$result = get_result()
|
70
|
$result = $mysqli->query()
|
71
|
$result->fetch_assoc()
|
72
|
$result->fetch_row()
|
73
|
$result->fetch_object()
|
74
|
$result->fetch_all(MYSQLI_ASSOC)
|
75
|
$result->fetch_all(MYSQLI_NUM)
|
76
|
$stmt = $mysqli->prepare("SELECT * FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc()) {
$ids[] = $row['id'];
$names[] = $row['name'];
$ages[] = $row['age'];
}
var_export($ages);
$stmt->close();
|
77
|
[22, 18, 19, 27, 36, 7]
|
78
|
*
|
79
|
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows === 0) exit('No rows');
$stmt->bind_result($idRow, $nameRow, $ageRow);
while($stmt->fetch()) {
$ids[] = $idRow;
$names[] = $nameRow;
$ages[] = $ageRow;
}
var_export($ids);
$stmt->close();
|
80
|
[106, 221, 3, 55, 583, 72]
|
81
|
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$arr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
82
|
fetch_assoc()
|
83
|
$arr = [];
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
84
|
[
['id' => 27, 'name' => 'Jessica', 'age' => 27],
['id' => 432, 'name' => 'Jimmy', 'age' => 19]
]
|
85
|
mysqli_result->fetch_all(MYSQLI_NUM)
|
86
|
mysqli_result->fetch_row()
|
87
|
$stmt = $mysqli->prepare("SELECT location, favorite_color, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$arr = $stmt->get_result()->fetch_all(MYSQLI_NUM);
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
88
|
$arr = [];
$stmt = $mysqli->prepare("SELECT location, favorite_color, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_row()) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
89
|
[
['Boston', 'green', 28],
['Seattle', 'blue', 49],
['Atlanta', 'pink', 24]
]
|
90
|
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows === 0) exit('No rows');
$stmt->bind_result($id, $name, $age);
$stmt->fetch();
echo $name; //Output: 'Ryan'
$stmt->close();
|
91
|
$name
|
92
|
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$arr = $stmt->get_result()->fetch_assoc();
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
93
|
$arr['id']
|
94
|
['id' => 36, 'name' => 'Kevin', 'age' => 39]
|
95
|
$arr[0]->age
|
96
|
$arr = []
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE id = ?");
$stmt->bind_param("s", $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_object()) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
97
|
[
stdClass Object ['id' => 27, 'name' => 'Jessica', 'age' => 27],
stdClass Object ['id' => 432, 'name' => 'Jimmy', 'age' => 19]
]
|
98
|
PDO::FETCH_PROPS_LATE
|
99
|
class myClass {}
$arr = [];
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE id = ?");
$stmt->bind_param("s", $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_object('myClass')) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
100
|
class myClass {
private $id;
public function __construct($id = 0) {
if($this->id === 0) $this->id = $id;
}
}
$arr = [];
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE id = ?");
$stmt->bind_param("s", $_SESSION['id']);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_object('myClass')) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
101
|
fetch_object('myClass')
|
102
|
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE Name LIKE %?%");
|
103
|
$search = "%{$_POST['search']}%";
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name LIKE ?");
$stmt->bind_param("s", $search);
$stmt->execute();
$arr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
if(!$arr) exit('No rows');
var_export($arr);
$stmt->close();
|
104
|
WHERE IN
|
105
|
call_user_func_array()
|
106
|
$inArr = [12, 23, 44];
$clause = implode(',', array_fill(0, count($inArr), '?')); //create 3 question marks
$types = str_repeat('i', count($inArr)); //create 3 ints for bind_param
$stmt = $mysqli->prepare("SELECT id, name FROM myTable WHERE id IN ($clause)");
$stmt->bind_param($types, ...$inArr);
$stmt->execute();
$resArr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
if(!$resArr) exit('No rows');
var_export($resArr);
$stmt->close();
|
107
|
$inArr = [12, 23, 44];
$clause = implode(',', array_fill(0, count($inArr), '?')); //create 3 question marks
$types = str_repeat('i', count($inArr)); //create 3 ints for bind_param
$types .= 'i'; //add 1 more int type
$fullArr = array_merge($inArr, [26]); //merge WHERE IN array with other value(s)
$stmt = $mysqli->prepare("SELECT id, name FROM myTable WHERE id IN ($clause) AND age > ?");
$stmt->bind_param($types, ...$fullArr); //4 placeholders to bind
$stmt->execute();
$resArr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
if(!$resArr) exit('No rows');
var_export($resArr);
$stmt->close();
|
108
|
try {
$mysqli->autocommit(FALSE); //turn on transactions
$stmt1 = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt2 = $mysqli->prepare("UPDATE myTable SET name = ? WHERE id = ?");
$stmt1->bind_param("si", $_POST['name'], $_POST['age']);
$stmt2->bind_param("si", $_POST['name'], $_SESSION['id']);
$stmt1->execute();
$stmt2->execute();
$stmt1->close();
$stmt2->close();
$mysqli->autocommit(TRUE); //turn off transactions + commit queued queries
} catch(Exception $e) {
$mysqli->rollback(); //remove all queries from queue if error (undo)
throw $e;
}
|
109
|
try {
$mysqli->autocommit(FALSE); //turn on transactions
$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $name, $age);
$name = 'John';
$age = 21;
$stmt->execute();
$name = 'Rick';
$age = 24;
$stmt->execute();
$stmt->close();
$mysqli->autocommit(TRUE); //turn off transactions + commit queued queries
} catch(Exception $e) {
$mysqli->rollback(); //remove all queries from queue if error (undo)
throw $e;
}
|
110
|
$mysqli->error
|
111
|
try {
$stmt = $mysqli->prepare("DELETE FROM myTable WHERE id = ?");
$stmt->bind_param("i", $_SESSION['id']);
$stmt->execute();
$stmt->close();
$stmt = $mysqli->prepare("SELECT id, name, age FROM myTable WHERE name = ?");
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$arr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
$stmt->close();
try {
$mysqli->autocommit(FALSE); //turn on transactions
$stmt = $mysqli->prepare("INSERT INTO myTable (name, age) VALUES (?, ?)");
$stmt->bind_param("si", $name, $age);
$name = 'John';
$age = 21;
$stmt->execute();
$name = 'Rick';
$age = 24;
$stmt->execute();
$stmt->close();
$mysqli->autocommit(TRUE); //turn off transactions + commit queued queries
} catch(Exception $e) {
$mysqli->rollback(); //remove all queries from queue if error (undo)
throw $e;
}
} catch (Exception $e) {
error_log($e);
exit('Error message for user to understand');
}
|
112
|
set_exception_handler(function($e) {
error_log($e);
exit('Error deleting');
});
$stmt = $mysqli->prepare("DELETE FROM myTable WHERE id = ?");
$stmt->bind_param("i", $_SESSION['id']);
$stmt->execute();
$stmt->close();
|
113
|
set_error_handler(function($errno, $errstr, $errfile, $errline) {
throw new Exception("$errstr on line $errline in file $errfile");
});
|
114
|
$mysqli->close()
|
115
|
$stmt->close()
|
116
|
$result->free()
|
117
|
$stmt->free()
|
118
|
$stmt
|
119
|
$stmt2
|
120
|
mysqli_stmt::$affected_rows
|
121
|
mysqli_stmt
|
122
|
mysqli_stmt::$num_rows
|
123
|
$result->num_rows
|
124
|
$stmt->num_rows
|
125
|
mysqli::$insert_id
|
126
|
mysqli_stmt::$insert_id
|
127
|
mysqli
|
128
|
$mysqli->insert_id
|
129
|
$stmt->insert_id
|