如何在语句执行期间保持php中的临时mysqli表可用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在语句执行期间保持php中的临时mysqli表可用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2446字,纯文字阅读大概需要4分钟。
内容图文
![如何在语句执行期间保持php中的临时mysqli表可用?](/upload/InfoBanner/zyjiaocheng/894/85ff7067be7a4936a372a6b76059f67e.jpg)
我正忙着尝试执行一组涉及使用临时表的语句.
我的目标是创建临时表,向其插入值,然后将临时表内容与另一个表进行比较.
当从RAW SQL执行时,这些语句在phpmyadmin中完美地工作,但我假设当我尝试插入数据时表不可用.
下面是我的php函数mysqli执行的代码:
function SearchArticles($Tags){
global $DBConn, $StatusCode;
$count = 0;
$tagCount = count($Tags);
$selectText = "";
$result_array = array();
$article_array = array();
foreach($Tags as $tag){
if($count == 0){
$selectText .= "('%".$tag."%')";
}else {
$selectText .= ", ('%".$tag."%')";
}
$count++;
}
$query = "CREATE TEMPORARY TABLE tags (tag VARCHAR(20));";
$stmt = $DBConn->prepare($query);
if($stmt->execute()){
$query2 = "INSERT INTO tags VALUES ?;";
$stmt = $DBConn->prepare($query2);
$stmt->bind_param("s", $selectText);
if($stmt->execute()){
$query3 = "SELECT DISTINCT art.ArticleID FROM article as art JOIN tags as t ON (art.Tags LIKE t.tag);";
$stmt = $DBConn->prepare($query3);
if($stmt->execute()){
$stmt->store_result();
$stmt->bind_result($ArticleID);
if($stmt->num_rows() > 0){
while($stmt->fetch()){
array_push($article_array, array("ArticleID"=>$ArticelID));
}
array_push($result_array, array("Response"=>$article_array));
}else{
array_push($result_array, array("Response"=>$StatusCode->Empty));
}
}else{
array_push($result_array, array("Response"=>$StatusCode->SQLError));
}
}else{
array_push($result_array, array("Response"=>$StatusCode->SQLError));
}
}else{
array_push($result_array, array("Response"=>$StatusCode->SQLError));
}
$stmt->close();
return json_encode($result_array);
}
第一个语句执行完美,但第二个语句给出了以下错误:
PHP Fatal error: Call to a member function bind_param() on a non-object
如果这是与Temp表不存在的错误,我如何保持这个表足够长的时间来运行其余的语句?
我试过用:
$stmt = $DBConn->multi_query(query);
所有查询都在一个,但我需要将数据插入一个查询并从SELECT查询中获取数据.
任何帮助将不胜感激,谢谢!
解决方法:
这不是临时表的问题.它应该保留在整个相同的连接中(除非它在超时时重置,不确定这部分).
错误是$stmt是非对象.这意味着您的查询无效(语法错误),因此mysqli拒绝创建mysqli_stmt的实例并返回一个布尔值.
使用var_dump($DBConn->错误)查看是否有任何错误.
编辑:我刚刚注意到你的查询$query2是INSERT INTO标签VALUES? (无论如何,这是多余的).如果这成为字符串“text”,这将成为INSERT INTO标签VALUES“text”.这是SQL语法错误.你应该包裹? with(),所以它变成INSERT INTO标签VALUES(?).
总之,改变这一行:
$query2 = "INSERT INTO tags VALUES ?;";
至:
$query2 = "INSERT INTO tags VALUES (?);";
还要注意你不需要;终止传入mysqli :: prepare的SQL语句.
内容总结
以上是互联网集市为您收集整理的如何在语句执行期间保持php中的临时mysqli表可用?全部内容,希望文章能够帮你解决如何在语句执行期间保持php中的临时mysqli表可用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。