我开始使用MySQL准备,我遇到了问题
那么bash
和SELECT
怎么办?
INSERT
我测试了这段代码,错误是:
致命错误:在...中的非对象上调用成员函数
$mysqli = new mysqli("localhost","root","pass","db"); $query = $mysqli->prepare("SELECT url FROM servers"); $query->execute(); $query->bind_result($data); $query2 = $mysqli->prepare("INSERT INTO links(url) VALUES (?)"); $query2->bind_param("s", $data); while ($query->fetch()) { echo $data; $query2->execute(); $query2->close(); } $query->close();
问题在哪里?
答案 0 :(得分:0)
我看到两个可能的问题。
我自己几次遇到这个问题。如果要使用嵌套的mysqli语句,则必须在进行另一次数据库调用之前“完成”数据库调用。
在您的上下文中:PHP尚未使用$query->execute();
完成第一次调用。如果现在运行$query->fetch()
,则会从数据库中提取一行,并且该语句会阻止连接,因为该语句未关闭。
如果要使用其他语句,则必须使用$query->close()
(这在您的情况下不起作用)或使用$query->store_result()
(这是您想要的)来关闭它。 mysqli::store_result
将整个结果集从数据库传输到内存中,并为下一个查询释放连接。
$query2
在while
循环中,在每次迭代中关闭查询$query2
,因此在第一次迭代后无法执行$query2->execute()
。该行应该移出循环。
注意:我还没有测试过这个。这只是我所知道的问题,我认为可能也是你的问题。
我希望这会有所帮助。
也许您可以使用INSERT ... SELECT
-Syntax来提高效果。
这也会删除嵌套语句。您可以先选择并打印所有数据,然后运行INSERT ... SELECT
查询以复制另一个表中的所有数据(或反过来)。