На этом сайте нашел много похожих проблем, но решения этих проблем, похоже, не отвечают. У рассматриваемого пользователя есть полный доступ к базе данных, и, насколько я могу судить, я не пропускаю ни одной запятой и т. д. Второй набор глаз был бы замечательным.

Представленная подпись имеет допустимый формат. Попытка открыть соединение.

<?php
// Tracks what fields have validation errors
$errors    = array();
// Default to showing the form
$show_form = true;

// 1. Get the input from the form
//  Using the PHP filters are the most secure way of doing it
$name   = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$output = filter_input(INPUT_POST, 'output', FILTER_UNSAFE_RAW);

// 2. Confirm the form was submitted before doing anything else
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

// 3. Validate that a name was typed in
if (empty($name)) {
    $errors['name'] = true;
}

// 3. Validate that the submitted signature is in an acceptable format
if (!json_decode($output)) {
    $errors['output'] = true;
}
}

// No validation errors exist, so we can start the database stuff
if (empty($errors)) {

echo "Submitted signature is in an acceptable format";"<br/>";

$dsn  = 'mysql:host=localhost;dbname=signatures';
$user = 'emkinsti_user1';
$pass = '6nqq103t26';
}
// 4. Open a connection to the database using PDO
try {
echo "Trying to open a connection";
$db = new PDO($dsn, $user, $pass);
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

// Make sure we are talking to the database in UTF-8
$db->exec('SET NAMES utf8');

// Create some other pieces of information about the user
// to confirm the legitimacy of their signature
$sig_hash = sha1($output);
$created  = time();
$ip       = $_SERVER['REMOTE_ADDR'];


// 5. Use PDO prepare to insert all the information into the database
$sql = $db->prepare('INSERT INTO signatures (signator, signature, sig_hash,    ip, created)
VALUES (:signator, :signature, :sig_hash, :ip, :created)');
$sql->bindValue(':signator', $name, PDO::PARAM_STR);
$sql->bindValue(':signature', $output, PDO::PARAM_STR);
$sql->bindValue(':sig_hash', $sig_hash, PDO::PARAM_STR);
$sql->bindValue(':ip', $ip, PDO::PARAM_STR);
$sql->bindValue(':created', $created, PDO::PARAM_INT);
$sql->execute();

// 6. Trigger the display of the signature regeneration
$show_form = false;
//  mysql_close($db);
$db = null;
?>
0
mikenike012 4 Мар 2015 в 18:42
1
В руководстве указано $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); с запятой после dbname=test', <= php .net/manual/en/pdo.connections.php почему бы не попробовать и посмотреть, разрешится ли проблема.
 – 
Funk Forty Niner
4 Мар 2015 в 18:46
@ Fred-ii- Он делает именно это, 'mysql:host=localhost;dbname=test' был помещен в string, а запятая следует после переменной в new PDO(). Почему это имеет значение?
 – 
Jordy
4 Мар 2015 в 18:50
TBH, я не совсем уверен и просто попросил ОП попробовать это таким образом и посмотреть, разрешится ли это. Если нет, то проблема в другом.
 – 
Funk Forty Niner
4 Мар 2015 в 18:53

2 ответа

Emkinsti_user1'@'localhost' для «подписей» базы данных, если вы используете CPanel, CPanel также использует префиксы для имени базы данных:

Вы использовали: emkinsti_user1 в качестве пользователей.

Вы должны использовать: emkinsti_signatures в качестве имени базы данных.

Войдите в свою CPanel, и там вы найдете имя базы данных с префиксом

1
Clark Superman 19 Авг 2016 в 23:54

Попробуйте http://php.net/manual/en/pdo.getavailabledrivers.php чтобы узнать, поддерживается ли база данных PDO.

<?php
print_r(PDO::getAvailableDrivers());
?>

Просто идея. Я бы ожидал другого сообщения об ошибке, если это не так. Итак, насколько я могу судить, у пользователя нет доступа при доступе к базе данных с локального хоста.

0
KIKO Software 4 Мар 2015 в 18:51
Кажется, это больше комментарий, чем ответ.
 – 
idmean
4 Мар 2015 в 18:53
Да умница ты. Но код плохо форматируется в комментарии. Отсюда и ответ. В любом случае, я не думаю, что будет простой ответ, но посмотрим.
 – 
KIKO Software
4 Мар 2015 в 18:54
Он опубликовал это как комментарий раньше, но затем удалил его и опубликовал как ответ. Не уверен, почему. @idmean
 – 
Jordy
4 Мар 2015 в 18:55
Попробовал и ваше предложение KIKO, и я вернулся: Array ([0] => mysql [1] => sqlite)
 – 
mikenike012
4 Мар 2015 в 18:57
Да, я думал, что это будет поддерживаться. Но присмотритесь к привилегиям, вы получаете доступ к базе данных с локального хоста. База данных находится на том же сервере, что и веб-сервер? Есть ли у пользователя разрешение на localhost?
 – 
KIKO Software
4 Мар 2015 в 18:59