PHP / MySQLi:使用准备好的查询进行更新/插入并不会持久存储到数据库中

时间:2013-02-22 14:10:07

标签: mysqli prepared-statement

我对mysql准备的查询有一些问题。特别是UPDATE和INSERT。

$mysqliStmt->execute();

不会更新或插入表格。它只是提供stmt结果。没有错误,警告或其他任何东西。 (见下文)

我希望有人知道我做错了什么:)。

我使用的插入查询:

INSERT INTO testdatabase.`test` (`test1`, `test2`) VALUES(?, ?)

更新查询:

UPDATE testdatabase.`test` SET `test1` = ? WHERE `id` = ? LIMIT 1

结果信息(更新):

'fieldCount' => 0,
'affectedRows' => 1,
'numRows' => 0,
'paramCount' => 2,
'insertId' => 0,
'sqlstate' => '00000',
'threadId' => 5291,
'errno' => 0,
'error' => '',
'warningCount' => 0,
'warnings' => false
'connectErrno' => 0,
'connectError' => NULL,
'hostInfo' => 'Localhost via UNIX socket',
'protocolVersion' => 10,
'serverInfo' => '5.1.49-3',
'serverVersion' => 50149,
'clientInfo' => '5.0.27',
'clientVersion' => 50027,
'info' => 'Rows matched: 1  Changed: 1  Warnings: 0'

代码:

$stmt = self::$_connection->prepare($query);
//binds params -> like/with $stmt::bind_param() but more generic
$this->_bindParameters($stmt) 
$stmt->execute();

现在更新/插入数据应该存储到数据库中还是我错了?

如果我使用phpmyadmin或mysql控制台验证查询结果,则数据库表既未更新也未插入新数据。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

你做错的主要是你提问的方式。
看,它可以归结为

  

我有一个查询,为什么不起作用?

NOBODY KNOWS。

我能说的唯一一个:

  

'info'=> '匹配的行数:1已更改:1警告:0'
  和
  'affectedRows'=> 1,

测量您的数据是否已更新 可能是你正在检查错误的表或数据库或类似的东西。

另外,要从mysqli获取错误,您必须要求它:

if (!$stmt->execute()) {
    throw new Exception(self::$error);
}