Opgaven du skal udføre er en udarbejdet redegørelse med et variabelt antal pladsholdere. Dette er enklere i PDO, men jeg vil vise dig den mysqli objektorienterede stiltilgang. Uanset hvad, udskriv altid et json-kodet array, så dit modtagende script ved, hvilken type data du kan forvente.
Jeg havde et uddrag liggende, der inkluderer et fuldt batteri af diagnostik og fejlkontrol. Jeg har ikke testet dette script, men det minder meget om dette mit indlæg .
if (empty($_POST['companyname']) || empty($_POST['username'])) { // perform any validations here before doing any other processing
exit(json_encode([]));
}
$config = ['localhost', 'root', '', 'dbname']; // your connection credentials or use an include file
$values = array_merge([$_POST['companyname']], explode(',', $_POST['username'])); // create 1-dim array of dynamic length
$count = sizeof($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?')); // -1 because companyname placeholder is manually written into query
$param_types = str_repeat('s', $count);
if (!$conn = new mysqli(...$config)) {
exit(json_encode("MySQL Connection Error: <b>Check config values</b>")); // $conn->connect_error
}
if (!$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE company_name = ? AND username IN ({$placeholders})")) {
exit(json_encode("MySQL Query Syntax Error: <b>Failed to prepare query</b>")); // $conn->error
}
if (!$stmt->bind_param($param_types, ...$values)) {
exit(json_encode("MySQL Query Syntax Error: <b>Failed to bind placeholders and data</b>")); // $stmt->error;
}
if (!$stmt->execute()) {
exit(json_encode("MySQL Query Syntax Error: <b>Execution of prepared statement failed.</b>")); // $stmt->error;
}
if (!$result = $stmt->get_result()) {
exit(json_encode("MySQL Query Syntax Error: <b>Get Result failed.</b>")); // $stmt->error;
}
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));
Hvis du ikke vil have oppustethed af alle disse diagnostiske tilstande og kommentarer, er her den ækvivalente knogle, som burde fungere identisk:
if (empty($_POST['companyname']) || empty($_POST['username'])) {
exit(json_encode([]));
}
$values = explode(',', $_POST['username']);
$values[] = $_POST['companyname'];
$count = count($values);
$placeholders = implode(',', array_fill(0, $count - 1, '?'));
$param_types = str_repeat('s', $count);
$conn = new mysqli('localhost', 'root', '', 'dbname');
$stmt = $conn->prepare("SELECT user_scid, user_scid FROM linked_user WHERE username IN ({$placeholders}) AND company_name = ?");
$stmt->bind_param($param_types, ...$values);
$stmt->execute();
$result = $stmt->get_result();
exit(json_encode($result->fetch_all(MYSQLI_ASSOC)));