我正忙着尝试执行一组涉及使用临时表的语句.
我的目标是创建临时表,向其插入值,然后将临时表内容与另一个表进行比较.
当从RAW sql执行时,这些语句在PHPmyadmin中完美地工作,但我假设当我尝试插入数据时表不可用.
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语句.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。