Verification: a143cc29221c9be0

Mysqli stmt bind param php

Файл PHP

PHP имеет несколько встроенных функций для обработки JSON.

Объекты в PHP можно преобразовать в JSON с помощью функции PHP json_encode():

PHP Файл

$myObj->name = "John";
$myObj->age = 30;
$myObj->city = "New York";

$myJSON = json_encode($myObj);

echo $myJSON;
?>

Показать файл PHP »

Клиентский JavaScript

Вот код JavaScript на клиенте, использующий вызов AJAX для запроса файла PHP из приведенного выше примера:

Пример

Используйте JSON.parse() для преобразования результата в объект JavaScript:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
    document.getElementById("demo").innerHTML = myObj.name;
  }
};
xmlhttp.open("GET", "demo_file.php", true);
xmlhttp.send();

Попробуйте сами »



Массив PHP

Массивы в PHP также будут преобразованы в JSON при использовании функции PHP json_encode():

PHP Файл

$myArr = array("John", "Mary", "Peter", "Sally");

$myJSON = json_encode($myArr);

echo $myJSON;
?>

Показать файл PHP »

Клиентский JavaScript

Вот код JavaScript на клиенте, использующий вызов AJAX для запроса файла PHP из приведенного выше примера массива:

Пример

Используйте JSON.parse(), чтобы преобразовать результат в массив JavaScript:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
    document.getElementById("demo").innerHTML = myObj[2];
  }
};
xmlhttp.open("GET", "demo_file_array.php", true);
xmlhttp.send();

Попробуйте сами »


База данных PHP

PHP - это серверный язык программирования, который может использоваться для доступа к базе данных.

Представьте, что у вас есть база данных на вашем сервере, и вы хотите послать ей запрос от клиента, где вы запрашиваете первые 10 строк в таблице под названием "клиенты".

На клиенте создайте объект JSON, который описывает количество строк, которые вы хотите вернуть.

Прежде чем отправлять запрос на сервер, преобразуйте объект JSON в строку и отправьте его в качестве параметра на URL адрес страницы PHP:

Пример

Используйте JSON.stringify() для преобразования объекта JavaScript в JSON:

obj = { "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
  }
};
xmlhttp.open("GET", "json_demo_db.php?x=" + dbParam, true);
xmlhttp.send();

Попробуйте сами »

Объяснение примера:

  • Определите объект, содержащий свойство и значение "limit".
  • Преобразуйте объект в строку JSON.
  • Отправьте запрос к файлу PHP со строкой JSON в качестве параметра.
  • Подождите, пока запрос вернется с результатом (как JSON)
  • Отобразите результат, полученный из файла PHP.

Взгляните на файл PHP:

PHP файл

header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("myServer", "myUser", "myPassword", "Northwind");
$stmt = $conn->prepare("SELECT name FROM customers LIMIT ?");
$stmt->bind_param("s", $obj->limit);
$stmt->execute();
$result = $stmt->get_result();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

Объяснение файла PHP:

  • Преобразуйте запрос в объект, используя функцию PHP json_decode().
  • Получите доступ к базе данных и заполните массив запрошенными данными.
  • Добавьте массив к объекту и верните объект как JSON с помощью функции json_encode().

Цикл через результат

Преобразуйте результат, полученный из файла PHP, в объект JavaScript или, в данном случае, массив JavaScript:

Пример

Используйте JSON.parse() для преобразования JSON в объект JavaScript:

...
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    myObj = JSON.parse(this.responseText);
    for (x in myObj) {
      txt += myObj[x].name + "
";
    }
    document.getElementById("demo").innerHTML = txt;
  }
};
...

Попробуйте сами »


Теоретический ответ

состоит в том, что переменная в bind_param передаётся по ссылке. Если посмотреть на описание функции в мануале, то можно увидеть значок & перед именем переменной. Вот это оно и есть.
Почитать про ссылки можно в мануале.

Если очень грубо, то мы передаем в функцию не значение, а только имя переменной (хотя корректнее говорить - ссылку на переменную), с которой будем работать. Одним из побочных эффектов этого будет возможность работать с переменной, которая ещё не определена на момент вызова функции.

Практический ответ:

Почему это сделано? Передача по ссылке нужна для того, чтобы можно было сначала подготовить запрос и привязать к нему переменные, а потом несколько раз вызвать execute, с разными значениями:

$stmt = $db->prepare("UPDATE users SET status = ? WHERE id = ?");
$stmt->bind_param("ss", $status, $id);
foreach ($data as $id => $status) {
    $stmt->execute();
}