我正在尝试对MySQL数据库执行简单操作:我的联系人在名为first_name
的列上有完整的名称,而列last_name
为空。
所以我想把first_name
列上的内容分开并在第一次出现空格时将其拆分,然后将第一部分放在first_name
列上,将第二部分放在{{1}列上列。
我使用以下代码,但它不起作用:
last_name
我可以在声明打开时使用$connection = new mysqli(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME, DATABASE_PORT);
$statement = $connection->prepare("SELECT id, first_name FROM contacts");
$statement->execute();
$statement->bind_result($row->id, $row->firstName);
while ($statement->fetch()) {
$names = separateNames($row->firstName);
$connection->query('UPDATE contacts SET first_name="'.$names[0].'", last_name="'.$names[1].'" WHERE id='.$row->id);
}
$statement->free_result();
$statement->close();
$connection->close();
吗?
最好的问候。
更新
$connection->query
返回$connection->query(...)
,我收到以下错误:
FALSE
我将代码更改为以下内容并且正常工作:
PHP Fatal error: Uncaught exception 'Exception' with message 'MySQL Error - 2014 : Commands out of sync; you can't run this command now'
答案 0 :(得分:0)
我可以在声明打开时使用
$connection->query
吗?
是。它将返回一个新的结果对象或只是一个布尔值,具体取决于SQL查询,请参阅http://php.net/mysqli_query - 在运行UPDATE
查询的情况下,它将始终返回一个布尔值,FALSE
如果它失败,TRUE
如果有效。
我想知道你为什么要问。也许你应该改进你的故障排除方式?
答案 1 :(得分:0)
我在给定时间只能有一个活动语句,因此我必须通过$connection->query()
方法进行其中一个查询。
正如@hakre所说:
我仍然保留我的建议你应该(必须!)做预备语句而不是query()来正确编码更新值
我选择使用语句方法进行更新查询,因此最终的工作代码如下:
$connection = new mysqli(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME, DATABASE_PORT);
$result = $connection->query("SELECT id, first_name FROM contacts");
$statement = $connection->prepare("UPDATE contacts SET first_name=?, last_name=? WHERE id=?");
while ($row = $result->fetch_row()) {
$names = separateNames($row[1]);
$statement->bind_param('ssi', $names[0], $names[1], $row[0]);
throwExceptionOnMySQLStatementError($statement, "Could not bind parameters", $logger);
$statement->execute();
throwExceptionOnMySQLStatementError($statement, "Could not execute", $logger);
}
$statement->free_result();
$statement->close();
$connection->close();
感谢所有给予他们意见的人,特别是@hakre帮助我达成了最终解决方案。