This question already has an answer here:
I'm receiving the error above in the get_template() function of my class listed below. Does anyone know why I am receiveing this error? All of the other queries execute fine and $template_number is definitely returning an int which is expected at this point in the query so why am I receiving this error? Could it be because the return on this query is formatted as TEXT in MySQL (and appears as a BLOB in PHPMyAdmin?
class Page{
private $con;
public function __construct(Connection $con) {
$this->con = $con;
if(isset($_GET['id'])){
$id = $_GET['id'];
}else{
$id = 1;
}
$this->get_headers($id);
$this->get_content($id);
$this->get_footer($id);
}
private function get_headers($pageId){
$retrieveHead = $this->con->prepare("SELECT headers FROM pages WHERE page_id=?");
$retrieveHead->bind_param('i',$pageId);
$retrieveHead->execute();
$retrieveHead->bind_result($header);
$retrieveHead->fetch();
$retrieveHead->close();
echo $header;
}
private function get_footer($pageId){
$retrieveFooter = $this->con->prepare("SELECT footer FROM pages WHERE page_id=?");
$retrieveFooter->bind_param('i',$pageId);
$retrieveFooter->execute();
$retrieveFooter->bind_result($footer);
$retrieveFooter->fetch();
$retrieveFooter->close();
echo $footer;
}
private function get_content($pageId){
$retreiveContent = $this->con->prepare("SELECT template_id, section_title, i1, i2 FROM content WHERE page_id=? ORDER BY sequence DESC");
$retreiveContent->bind_param('i',$pageId);
$retreiveContent->execute();
$retreiveContent->bind_result($template_id, $section_title, $i1, $i2);
while ($retreiveContent->fetch()) {
//Variables will be populated for this row.
//Update the tags in the template.
$template = $this->get_template($template_id);
$template = str_replace('[i1]',$i1,$template);
$template = str_replace('[i2]',$i2,$template);
//$theTemplate is populated with content. Probably want to echo here
echo $template;
}
$retreiveContent->close();
}
private function get_template($template_number){
$retreiveFunction = $this->con->prepare("SELECT code FROM templates WHERE template_id=?");
$retreiveFunction->bind_param('i',$template_number);
$retreiveFunction->execute();
$retreiveFunction->bind_result($template);
$retreiveFunction->fetch();
$retreiveFunction->close();
return $template;
}
}
Table structure can be found below:
See here and here.
mysqli_stmt::execute()
by default stores the results server side and fetches row by row unless you callmysqli_stmt::store_result()
to buffer them client side. Attempting to prepare another statement most likely fails while there are unfetched reults server side from a previous statement.For anyone else searching for this solution, as bwewsing suggests I needed to add in store_result however from the links provided above it's not too clear where this should be implemented.
Implementation should take place in the initial calling method. So, as the get_content() method calls the get_template() method it should be implemented here in the following manner: