Следуя ранее заданному вопросу о санации строки, я сейчас пытаюсь использовать принципы, описанные в Как я могу предотвратить внедрение SQL в PHP?
$connection = mysqli_connect('localhost', 'user', 'xxxxx');
$database = mysqli_select_db($connection, 'xxxxx');
$param1 = $_GET['q'];
//prepared mysqli statement
$stmt = mysqli_stmt_init($connection);
$stmt = $connection->prepare('SELECT * FROM CONTACTS WHERE SURNAME = ?');
$stmt->bind_param('s', $param1); // 's' specifies the variable type => 'string'
$stmt->execute();
$result = $stmt->get_result();
$num_rows = mysqli_num_rows($result);
echo "Records Found:".$num_rows."<br/><br/><hr/>";
while ($row = $result->fetch_assoc()) {
echo $result['COMPANY']." ".$result['FORENAME']." ".$result['SURNAME'];
}
Однако, хотя $ connection и $ database обрабатываются правильно, я получаю следующую ошибку:
Неустранимая ошибка: вызов неопределенного метода mysqli_stmt :: get_result () в
/my_first_mysqli.php в строке xxxx
Не правильно ли я понимаю синтаксис или он имеет большее отношение к php версии 5.2.0? (Да, я обновляю код перед обновлением сервера).
Если это последнее, есть ли более простой метод MySQLi, который я могу использовать, который сработает до обновления версии php?
EDIT
Я обновил это сейчас, что немного чище:
$servername = "localhost"; $username = "xxxx"; $password = "xxxx"; $dbname = "xxxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$param1 = $_GET['q'];
$stmt = mysqli_prepare($conn, "SELECT CONTACTID, COMPANY, FORENAME, SURNAME FROM CONTACTS WHERE SURNAME = ?");
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $param1);
/* execute query */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $CONTACTID, $COMPANY, $FORENAME, $SURNAME);
/* fetch value */
mysqli_stmt_fetch($stmt);
$num_rows = mysqli_num_rows($stmt);
echo "Records Found:".$num_rows."<br/><br/><hr/>";
/* close statement */
mysqli_stmt_close($stmt);
mysqli_close ($conn);
Я, очевидно, не получаю результат набора записей для прохождения цикла и не знаю, как ... Остальное, кажется, работает без выдачи ошибки.