2

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.

user3062123
  • 217
  • 2
  • 4
  • 18

3 Answers3

4

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
Funk Forty Niner
  • 74,450
  • 15
  • 68
  • 141
Hackerman
  • 12,139
  • 2
  • 34
  • 45
  • If you feel that this asnwer help to solve your problem, don't forget to mark it as correct...cheers ;) – Hackerman Apr 14 '14 at 15:09
1

On Ubuntu 14.04

Install php5-mysql package

sudo apt-get install php5-mysql

If the above is already installed

sudo php5enmod pdo

sudo php5enmod pdo_mysql

Restart Web Server

taari
  • 954
  • 9
  • 8
0

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.

Álvaro González
  • 142,137
  • 41
  • 261
  • 360