这是一个具体的问题。
我有一个功能如下。我echo
和$user
变量$request
只是为了确保它们已通过,我正在使用gettype()
检查它们是否同时存在整数。
public function acceptRequest($user, $request){
echo $user . $request ;
$this->db->query("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = $request AND user_responseId = $user ");
echo 'success';
}
当我调用此函数时
$test->acceptRequest(3,9);
它没有更新。但是,当我用3和9替换MySQL中的$request
和$user
变量时,
public function acceptRequest($user, $request){
echo $user . $request ;
$this->db->query("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = 9 AND user_responseId = 3 "); // replace variables
echo 'success';
}
有效。表格已更新。所以它不是MySQL语句的错误。我的变量都是整数。他们通过了这个功能。为什么我的表行没有更新?
答案 0 :(得分:0)
你可以尝试
$this->db->query("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = '$request' AND user_responseId = '$user' ");
或者你可以检查mysql是否在严格模式下运行。
答案 1 :(得分:0)
使用MySQLi和Prepared语句:
public function acceptRequest($user, $request){
echo $user . $request ;
# NOTE Your db handle needs to be mysqli!
# http://php.net/manual/en/mysqli.quickstart.statements.php
$mysqli = $this->db;
if ($stmt = $mysqli->prepare("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = ? AND user_responseId = ? ")) {
/* bind parameters - i ensures integers */
$stmt->bind_param("ii", $user, $request);
/* execute query */
$stmt->execute();
/* close statement */
$stmt->close();
echo 'success';
}
}
答案 2 :(得分:0)
正如Joe T所提到的,使用MySQLi将是最好的技术 - 因为你不想成为SQL注入的牺牲品。假设请求和响应是数据库中的整数:
$query = ("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = ? AND user_responseId = ? ");
$stmt = $mysqli->prepare($query);
$stmt->bind_param('ii', $request, $user);
$stmt->execute();
$stmt->bind_result();
$stmt->fetch();
$stmt->close();
但是为了你的问题,包含你的变量如:{$ variable}将确保sql语句正确运行:
$this->db->query("UPDATE test_requestBuddy SET accept = 'accepted'
WHERE user_requestId = {$request} AND user_responseId = {$user} ");