Я пытался решить проблему с моим классом MySQLi. Он выполняет запрос на обновление, но на самом деле он не обновляется. Это говорит мне, что одна строка была затронута, но в действительности ничего не изменилось.
Это мой код для выполнения запросов:
class database_model {
private $mysqli = null;
private $hostname = '127.0.0.1';
private $username = 'root';
private $password = 'password';
private $database = 'database';
public function __construct()
{
$this->mysqli = new mysqli($this->hostname, $this->username, $this->password, $this->database);
if ($this->mysqli->connect_errno) {
die('Failed to connect to MySQL: (' . $this->mysqli->connect_errno . ') ' . $this->mysqli->connect_error);
}
}
public function query($query, $parameters)
{
$stmt = $this->mysqli->prepare($query);
if (is_array($parameters)) {
call_user_func_array('mysqli_stmt_bind_param', array_merge(array($stmt, str_repeat('s', count($parameters))), $this->makeValuesReferenced($parameters)));
} else {
$stmt->bind_param('s', $parameters);
}
$stmt->execute();
$results = $stmt->get_result();
$this->mysqli->commit();
$stmt->close();
return $results;
}
private function makeValuesReferenced(&$arr)
{
$refs = array();
foreach($arr as $key => $value) {
$refs[$key] = &$arr[$key];
}
return $refs;
}
}
Для пояснения, makeValuesReferenced и call_user_func_array используются для динамического связывания параметров с запросом.
Я включил сообщение об ошибке.
Некоторые другие вещи, на которые стоит обратить внимание. Запрос на обновление вызывается из статической функции, но значения верны внутри функции запроса. Код, вызывающий функцию запроса, выглядит следующим образом:
$session_query = 'UPDATE session SET data = ? WHERE session.user = ?';
self::$db->query($session_query, array($json_data,
self::$credential_value));
$json_data example value: {"dialog_choices":[["Companion","Start searching",3,1]]}
value after updating to $json_data: {"dialog_choices":[["Companion","Start searching",3,1]],"data_encounter":{"id":0}}
Остается неизменным
self::$credential_value corresponds to the right "session.user".
Я в недоумении, я пробовал много разных вариантов, думая, что это может быть проблема коммита или побега, но, похоже, это не так.
Искренне Ваш,
Ник
Задача ещё не решена.
Других решений пока нет …