是否可以在打开语句时通过链接直接运行mysqli查询?

时间:2013-01-16 12:42:49

标签: php mysql

我正在尝试对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'

2 个答案:

答案 0 :(得分:0)

  

我可以在声明打开时使用$connection->query吗?

是。它将返回一个新的结果对象或只是一个布尔值,具体取决于SQL查询,请参阅http://php.net/mysqli_query - 在运行UPDATE查询的情况下,它将始终返回一个布尔值,FALSE如果它失败,TRUE如果有效。

顺便说一下,Mysqli connection object不是Mysqli statement object,所以它们通常不会相互干扰(断开连接可能会破坏/打破某些情况下的声明,但我认为这是一个边缘情况你暂时可以忽略的问题。)

我想知道你为什么要问。也许你应该改进你的故障排除方式?

答案 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帮助我达成了最终解决方案。