我一直试图解决我在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".
我在这里不知所措,我尝试了许多不同的变化,认为它可能是一个提交或逃避问题,但它似乎都不是。
真诚的, 尼克