View Full Version : Problem with SQL query inside a php function
EquinoxWorld
08-04-2011, 03:49 PM
Hello everyone, I am trying to wrap a SQL query with a function to later pass as a variables into one of my templates. Whenever I run this simple query (for example to get the number of the contest) not wrapped as a function, it returns the value fine (which is 1). The following works perfect:
<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
?>
When I try to wrap a function around it and try and call it to verify the function is printing out what is expected I get a 500 Internal Server Error using the following code:
<?php
define('CSRF_PROTECTION', true);
function sotw_number() {
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}
sotw_number();
?>
Even using the following code I get the 500 internal server error.
<?php
define('CSRF_PROTECTION', true);
function sotw_number($dummy) {
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}
sotw_number(true);
?>
My question is how can I get the function to "display" the results correctly having a SQL query inside? Any ideas anyone? If anyone has any input or feedback please don't hesitate to share. :)
Thanks for your time everyone.
I think maybe global.php doesn't work right when included inside a function. You could do this:
<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');
function sotw_number($dummy) {
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}
sotw_number(true);
?>
(BTW, I had a feeling the code I posted last night was undoing something you were trying to do :) )
EquinoxWorld
08-04-2011, 04:07 PM
I think maybe global.php doesn't work right when included inside a function. You could do this:
<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');
function sotw_number($dummy) {
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}
sotw_number(true);
?>
(BTW, I had a feeling the code I posted last night was undoing something you were trying to do :) )
xD That worked PERFECT! Using a function instead of a do REQUEST does seem more reasonable hu? :) Thanks for your help :D
--------------- Added 1312478868 at 1312478868 ---------------
OK well almost works :( . It works but it displays the value at the top left corner of every page of that script...
Any ideas why this would be happening?
This the plugin I am using:
require_once('./intuitco/cotw/functions/cotw_func_contest_num.php');
$cotw_sotw_contests_number = sotw_number(true);
vB_Template::preRegister('COTW_SOTW','cotw_sotw_co ntests_number' => $cotw_sotw_contests_number);
cellarius
08-04-2011, 04:45 PM
Because you use echo. You can't use echo to output things in vB properly. You need to register the variable for template use.
EquinoxWorld
08-04-2011, 04:58 PM
Because you use echo. You can't use echo to output things in vB properly. You need to register the variable for template use.
OK. Would you mind explaining please a bit further? :) I know I can use return instead of echo but how do you register a function as a variable for use in a template? It took me a while to get the functions to work properly but now I can't use them in the template. I am using this plugin:
ob_start();
require_once('./intuitco/cotw/functions/cotw_func_contest_num.php');
$cotw_sotw_contests_number = sotw(true);
ob_end_clean();
vB_Template::preRegister('OFTW_SOTW',array('cotw_s otw_contests_number' => $cotw_sotw_contests_numbe
And this is the php file itself: If I just call the function in this file and call it in my browser I do get the correct value btw.
<?php
define('CSRF_PROTECTION', true);
$curdir = getcwd ();
chdir('/var/xxxxx/xxx/aniworlds.net/subdomains/laboratories/httpdocs');
require_once('./global.php');
chdir ($curdir);
//===================================Contests Number==================================//
//================================First Contest:Signature Of The Week=======================================//
//==============================NOTHING IS CHANGED BEYOND THIS LINE!!!!!====================================//
//================================================== ================================================== ======//
function sotw($dummy)
{
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}
//================================================== ================================================== =====//
//===================================Second Contest:Avatar Of The Week=====================================//
//==============================NOTHING IS CHANGED BEYOND THIS LINE!!!!!====================================//
//================================================== ================================================== ======//
function aotw($dummy)
{
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_aotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
return $row[0];
}
//================================================== ================================================== ======//
//=================================END OF PRINTING CURRENT CONTEST NUMBER===================================//
//================================================== ================================================== ======//
?>
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.