我正忙于尝试执行一组涉及使用临时表的语句。
我的目标是创建临时表,向其中插入值,然后将临时表的内容与另一个表进行类似的比较。
当从 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
如果这是与不存在的临时表有关的错误,我如何保留此表足够长的时间以运行其余语句?
我尝试过使用:
$stmt = $DBConn->multi_query(query);
将所有查询合二为一,但我需要将数据插入一个查询并从 SELECT 查询中获取数据。
任何帮助将不胜感激,谢谢!
最佳答案
你有一个简单的语法错误,像这样使用参数周围的括号
INSERT INTO tags VALUES (?)
关于php - 如何在语句执行期间保持临时 mysqli 表在 php 中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35059377/