I have a config file that connects to a remote database, however i keep receiving an error that i don't know how to fix. In the earlier versions it was meant to be a bug but i assumed it would have been fixed by 5.5.3.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');
$host = "localhost";
$dbname = "registration";
$username = "databaseEditor";
$password = "yolo10";
// 1002 = MYSQL_ATTR_INIT_COMMAND
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try
{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username$
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
header('Content-Type: text/html; charset=utf-8');
echo "File works";
?>
I keep receiving the error "Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'"
. I have tried to use 1002 instead of 'MYSQL_ATTR_INIT_COMMAND' but then i end up with the error "syntax error, unexpected '1002' (T_LNUMBER)"
instead and i have also have installed the newest php-mysql extension.
Try editing your php.ini:
On a windows server you can add the following lines in your php.ini
extension=php_pdo.dll
extension=php_pdo_mysql.dll
On a Linux server you can compile php with the following option --with-pdo-mysql
In your php.ini, add the following lines
extension=pdo.so
extension=pdo_mysql.so
The PDO::MYSQL_ATTR_INIT_COMMAND
constant is defined by the MySQL driver of the PDO extension. You most likely forgot to install either.
Once you install the appropriate extensions, you can forget about PDO::MYSQL_ATTR_INIT_COMMAND
. The correct way to set the connection encoding is what you already do—the DSN parameter in the constructor:
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username$
^^^^^^^^^^^^
Last but not least, your code seems to have plenty of syntax errors. You need to enable full error reporting in your php.ini file because these lines:
error_reporting(E_ALL);
ini_set('display_errors', 'on');
... won't execute if the script can't even run.
sudo apt-get install php5-mysql
sudo php5enmod pdo
sudo php5enmod pdo_mysql