Hi,
I'm relatively new to PHP, but have already written a few functional web-based scripts. I recently decided to implement a MySQL-based system, but hit the following problem...
I have PHP version 5.03, and MySQL v 4.19. I downloaded and compiled both, and both work perfectly alone. However, when I run a command-line app to manipulate my database, I get the following error:
__________________________________________________________________________ veep@tinsel:~# ./useradmin -a -u unclebulgaria -p uberwomble constructor called
Fatal error: Call to undefined function mysql_connect() in veep/useradmin on line 16
Fatal error: Call to undefined function mysql_close() in /veep/useradmin on line 22
veep@tinsel:~#
__________________________________________________________________________
You might think 'Aah! the doofus has forgotten to link MySQL into the compiled PHP interpreter'.
However, my phpinfo() page gives the following information:
__________________________________________________________________________ Configure command:
'./configure' '--with-apxs2=/opt/apache/sbin/apxs' '--prefix=/usr' '--sysconfdir=/etc/php5' '--with-dba' '--with-db4' '--with-auth' '--with-zlib' '--with-tiff' '--with-jpeg' '--with-mysql=/usr'
__________________________________________________________________________
And...
__________________________________________________________________________
MySQL-related data:
mysql MySQL Support enabled Active Persistent Links 0 Active Links 0 Client API version 4.1.9 MYSQL_MODULE_TYPE external MYSQL_SOCKET /tmp/mysql.sock MYSQL_INCLUDE -I/usr/include/mysql MYSQL_LIBS -L/usr/lib -lmysqlclient
Directive Local Value Master Value mysql.allow_persistent On On mysql.connect_timeout 60 60 mysql.default_host localhost localhost mysql.default_password wurms wurms mysql.default_port 3306 3306 mysql.default_socket no value no value mysql.default_user wiggly wiggly mysql.max_links Unlimited Unlimited mysql.max_persistent Unlimited Unlimited mysql.trace_mode Off Off _________________________________________________________________________
Finally, the client program is:
_________________________________________________________________________
#!/usr/bin/php <?php
class UserDB { static $user='wiggly'; static $pass='wurms'; static $db='multimedia_access';
private $m_link; private $m_live;
function __construct() { print("constructor called\n"); $this->m_link = mysql_connect('localhost', self::$user, self::$pass); $this->m_live = mysql_select_db(self::db); }
function __destruct() { mysql_close($this->m_link); print("destructor called"); }
function Add($u, $p)
{
$H = md5($u, true);
// $R = mysql_query("INSERT INTO users (userkey, user, password) values ($H, $u, $p)", $this->m_link);
$S = mysql_real_escape_string("INSERT INTO users (userkey, user, password) values ('$H', '$u', '$p')", $this->m_link);
$R = mysql_query($S, $this->m_link);
if (!$R)
{
printf("SQL query error during Add operation\n");
}
return $R;
}
function Delete($u) { $H=md5($u, true); $R=mysql_query("DELETE FROM users WHERE userkey=$H"); if ($R) { $R=mysql_query("DELETE FROM iplist WHERE userkey=$H"); } if (!$R) { printf("SQL query error during Add operation\n"); } return $R; }
function Replace($u, $p) { return 0; }
function Tabulate() { $R=mysql_query("SELECT user,password FROM TABLE users"); if (!$R) { printf("SQL query error during List operation\n"); }
$N=mysql_num_rows($R);
if ($N > 0) { while($Row = mysql_fetch_row($R)) { foreach($Row as $K => $V) { $Col = mysql_field_name($R ,$K); printf("%s='%s', ", $Col, $V); } printf("\n"); } } return $R; } }
function Usage($text)
{
printf("useradmin:\n\tuseradmin (-a|-d|-r) -u <user name> -p <password>\n\n");
printf("\t-a - add given user.\n");
printf("\t-d - delete given user.\n");
printf("\t-r - replace given user.\n");
printf("\t-l - list all users and passwords in the database.\n");
printf("\n\t%s\n\n", $text);
exit(0);
}
function do_add($u, $p) { $D=new UserDB();
return $D->Add($u, $p); }
function do_del($u) { $D=new UserDB();
return $D->Delete($u); }
function do_rep($u, $p) { $D=new UserDB();
return $D->Replace($u, $p); }
function do_list() { $D=new UserDB();
return $D->Tabulate(); }
function main() { $password=''; $username=''; $command['a']=false; $command['d']=false; $command['r']=false; $command['l']=false; $cmdcount=0; $opt = getopt("ladru:p:h"); foreach ($opt as $k => $v) { switch($k) { case 'h': Usage("Help information."); break; case 'p': if ($v) { $password=$v; } break; case 'u': if ($v) { $username=$v; } break; case 'a': $command[$k]=true; $cmdcount += 1; break; case 'd': $command[$k]=true; $cmdcount += 1; break; case 'r': $command[$k]=true; $cmdcount += 1; break; case 'l': $command[$k]=true; $cmdcount += 1; break; default: } } if ($cmdcount > 1) { Usage("You may specifiy no more than one command at a time"); } else if ($cmdcount < 1) { Usage("You must specify one of add, delete, replace"); }
if ($command['a'] == true)
{
if ($username == false || $password == false)
{
Usage("You must specify the username and password when adding an user");
}
do_add($username, $password);
}
else if ($command['r'] == true)
{
if ($username == false || $password == false)
{
Usage("You must specify the username and password when replacing an user");
}
do_del($username);
}
else if ($command['d'] == true)
{
if ($username == false)
{
Usage("You must specify the username when deleting an user");
}
else if ($password != false)
{
Usage("The password is superfluous for the delete comand");
}
do_rep($username, $password);
}
else if ($command['l'] == true)
{
if ($username != false || $password != false)
{
Usage("Superfluous arguments given to the list command");
}
do_list($username, $password);
}
exit(0); }
main();
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php