Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 打开语句时,是否可以通过链接直接运行mysqli查询?_Php_Mysql - Fatal编程技术网

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

Php 打开语句时,是否可以通过链接直接运行mysqli查询?,php,mysql,Php,Mysql,我试图在MySQL数据库上做一个简单的操作:我的联系人在名为first\u name的列上有他们的全名,而last\u name列是空的 所以我想把first\u name列上的内容分割成第一个空格,第一部分放在first\u name列上,第二部分放在last\u name列上 我使用以下代码,但它不起作用: $connection = new mysqli(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME

我试图在MySQL数据库上做一个简单的操作:我的联系人在名为
first\u name
的列上有他们的全名,而
last\u name
列是空的

所以我想把
first\u name
列上的内容分割成第一个空格,第一部分放在
first\u name
列上,第二部分放在
last\u 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'
我将代码更改为以下代码并进行了操作:

$connection = new mysqli(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME, DATABASE_PORT);

$result = $connection->query("SELECT id, first_name FROM contacts");

while ($row = $result->fetch_row()) {
  $names = separateNames($row[1]);

  $connection->query('UPDATE contacts SET first_name="'.$names[0].'", last_name="'.$names[1].'" WHERE id='.$row[0]);
}

$connection->close();
打开语句时,是否可以使用
$connection->query

对。它将返回一个新的结果对象或仅返回一个布尔值,具体取决于SQL查询,请参阅-在运行
更新
查询的情况下,它将始终返回一个布尔值,
FALSE
如果失败,
TRUE
如果有效

BTW,它们不是,所以它们通常不互相干扰(断开可能破坏/中断某些情况下的语句,但我认为这是你的问题的一个边缘情况,你可以暂时忽略)。


我想知道你为什么问这个问题。也许您应该改进解决问题的方法?

我在给定时间只能有一条活动语句,因此我必须通过
$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,他们帮助我找到了最终的解决方案。

请显示separateNames函数。划分您的问题:拆分字符串或创建SQL查询都有问题。具体地问。还有,“但出于某种原因,它没有做我想做的事”:意思是什么?@hakre:我的问题是永远不会分开字符串。我的问题是没有执行更新查询。@viakondratiuk:separateNames函数返回一个包含两个元素的数组:名字和姓氏。如果您愿意,我可以发布函数,但这不是我的问题。查询方法要么返回布尔值,要么返回mysqli_result对象(),而不是新的语句对象。@JorgeRaimundo:具体的SQL查询是什么?
->query()
操作的返回值是多少?是什么?请提供所有这三个,我会告诉你更多提出正确的问题,你就会得到正确的答案;)具体查询:updatecontacts SET first_name=“Helio”,last_name=“Moryso”其中id=5返回值:bool(false)Error:PHP致命错误:未捕获异常“exception”,消息为“MySQL Error-2014:命令不同步;你现在不能运行这个命令,顺便说一句,我知道连接不是语句。。。我的问题是正确的:“我可以在打开语句时使用$connection->query吗?”。显然不是。@JorgeRaimundo:您仍然可以调用该查询,缺少的是错误检查。这句话不是问题,你已经得到了结果。首先释放结果,您可以在语句“open”时成功地
$connection->query
。现在也不要说得这么聪明,你没有做任何故障排除,我不会这样评论,你永远不会看到这个错误消息。所以现在就开始整理,而不是抱怨你得到了一些帮助。不要向信使开枪。