Pdo error 500

I am getting Internal Server Error when I use the following code. Do I have to change any configuration? I am using PHP version 5.2.6. I couldn't find any documentation about this issue. Please let...

I am getting Internal Server Error when I use the following code. Do I have to change any configuration? I am using PHP version 5.2.6. I couldn’t find any documentation about this issue. Please let me know. Thank you.

try {
    $dbh = new PDO($db_host1, $db_username, $db_password);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Nasreddine's user avatar

Nasreddine

36.1k17 gold badges77 silver badges93 bronze badges

asked Dec 10, 2011 at 15:47

nav100's user avatar

5

You have to pass DSN as first parameter of PDO constructor.

try {
    $dsn = "mysql:dbname=testdb;host={$db_host1}";
    $dbh = new PDO($dsn, $db_username, $db_password);
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

answered Dec 10, 2011 at 16:34

Eugene Manuilov's user avatar

Eugene ManuilovEugene Manuilov

4,1918 gold badges31 silver badges47 bronze badges

I had the same 500 error after installing php-mysql.

Solution:

Restart the webserver.

I forgot to restart my webserver, which resolved the problem for me.

Apache error log said :

> PHP Fatal error:  Uncaught Error: Undefined class constant
> 'MYSQL_ATTR_INIT_COMMAND' in /var/www/html/[...].php:8 Stack trace:
> #0 /var/www/html/[...].php(27): myFunction()
> #1 {main}   thrown in /var/www/html/[...].php on line 8, referer: http://localhost/

Starsky's user avatar

Starsky

1,69015 silver badges23 bronze badges

answered Mar 31, 2022 at 14:36

Cari Bou's user avatar

2

160 votes

1 answers

Get the solution ↓↓↓

I am writing a simple database application with PHP and MySQL. I am using ajax to run scripts server-side. I have written a database class using PDO.

I have written various php scripts to handle inserting data, and they’re all using my class’s «prepare()» and «execute()» methods.

I wrote a separate php script to create the tables and delete the tables, and also to insert sample data, and to delete all data. This is to help me return to a «known» set of data while I am building and debugging the database application.

I have created four buttons in html, and I am calling a php script asychronously, passing a variable called «script» using GET. In my script, I have a switch statement which determines the SQL command to run. There are no variables I need to bind.

When I click a button to execute a script, it works — if the circumstances allow. So, for example, if I click to delete all tables, it will delete the tables. However, if I click it again (and there are no tables there to delete), the javascript returns a 500 — Internal Server Error. I would like to return an error message, but can’t work out where in my scripts to handle this.

Here are my class methods:

public function prepare($query){
  // PDO prepare allows for binding of values, removes threat of SQL injection and improves query performance
  $this->statement = $this->connection->prepare($query);
}

public function bind($parameter, $value, $type = null){
  // PDO bindValue binds inputs to placeholders
  if(is_null($type)){
    switch(true){
      case is_int($value):
        $type = PDO::PARAM_INT;
        break;
      case is_bool($value):
        $type = PDO::PARAM_BOOL;
        break;
      case is_null($value):
        $type = PDO::PARAM_NULL;
        break;
      default:
        $type = PDO::PARAM_STR;
    }
  }
  $this->statement->bindValue($parameter, $value, $type);
}

public function execute(){
  // Executes the prepared statement
  return $this->statement->execute();
}

public function allresults(){
  // Returns all results
  $this->execute();
  return $this->statement->fetchAll(PDO::FETCH_ASSOC);
}

And here is the key part of the php script being called with ajax:

switch ($script) {
  case "create":
      global $create_tables;
      global $database;
      $database->prepare($create_tables);
      $result = $database->execute($create_tables);
      if($result){
        echo "Success";
      }
      else{
        echo "Failed";
      }
      break;

One of the buttons:

<button type="button" class="btn btn-success" onclick="library('newsql.php?script=create')">Create Tables</button>

And my js:

function library(path) {


xmlhttp = new XMLHttpRequest();
  xmlhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
          document.getElementById("main").innerHTML = this.responseText;
      }
  };
  xmlhttp.open("GET",path,true);
  xmlhttp.send();
};

I think it has something to do with the standard return for a prepared statement, but maybe it’s something to do with executing a prepared statement without binding variables, or repeating a prepared statement without changing variables?

2022-05-26

Write your answer


495

votes

Answer

Solution:

So you have a problem of diagnosing what is going on.

  • In your JS function, you’re handling status == 200 but nothing for errors (like 500)
  • Open your development console at the browser (F12) and go to «Network» tab before you click the button to get the 500 error, you’ll be able to see the headers and response tabs for your ajax call (the request/response Headers AND the html/json/whatever Response) that is your PHP
  • Being a 500 error at PHP and you see nothing at the Response, then your PHP script is not echoing nothing, but you’ll probably see something at your error log for PHP OR Apache. You have to learn to monitor those at each call when an error 500 arise. Then you’ll see the exact reason you’re obtaining an error 500 for your call instead of the 200 (OK) you’re expecting at your JS function…

Hope that helps.


Share solution ↓

Additional Information:

Date the issue was resolved:

2022-05-26

Link To Source

Link To Answer
People are also looking for solutions of the problem: xmlhttprequest error flutter

Didn’t find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.


Similar questions

Find the answer in similar questions on our website.

Мой сайт отправляет XMLHttpRequest к этому сценарию PHP:

<?php
if(isset($_POST))
{
require ('../../PDOConnect.php');
try
{
$insert = $pdo->prepare("INSERT INTO priorities
employeeID, WorkOrderNumber
VALUES (?,?)");
$insert->bindValue(1,$_POST['employeeID'],PDO::PARAM_INT);
$insert->bindValue(2,$_POST['WorkOrderNumber'],PDO::PARAM_INT);
$insert->execute();
echo "try";
}
catch(Exception $e)
{
echo "catch";
echo $e;
}
}
?>

На данный момент, priorities таблица не существует Я ожидаю XMLHttpRequest«s status быть 500 потому что запрос, очевидно, всегда будет неудачным. PDO регистрирует ошибку, потому что PDOConnect содержит

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

но я получаю 200не 500, Я новичок в PDO. Когда я использовал подготовленные операторы MySQLi, я получал 500 назад из-за неудачных сценариев PHP, но PDO действует иначе. Я хочу, чтобы клиент знал, что запрос не прошел, а не получил 200 назад и думаю, что все прошло хорошо. Я получаю одинаковые результаты с и без try а также catch, Я не понимаю, как работает PDO? Нужно ли менять настройку PDO?

Изменить: я добавил echo "try"; а также echo "catch";, Клиента responseText всегда «пробуй», никогда не «лови». Кажется, что catch заявление не работает. Это почему?

мой PDOConnect.php файл содержит:

<?php
$options =
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
];
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8mb4','root','mypassword',$options);
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
?>

-2

Решение

Убедитесь, что параметры PDO установлены правильно. Важно установить PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION опция через параметр $ option конструктора PDO. Не устанавливайте эту опцию через setAttribute (), это бессмысленно.

$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_PERSISTENT => false,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $charset COLLATE $collate"];

$pdo = new PDO($dsn, $username, $password, $options);

Затем обработайте исключение и отправьте код ошибки 500 http:

try {
// do something
} catch(Exception $ex) {
header('500 Internal Server Error', true, 500);
echo $ex->getMessage();
}

1

Другие решения

Вы также можете попробовать это в своем синтаксисе try … catch, чтобы узнать, какую ошибку вы получаете при запросе PDO.

<?php
try {
//pdo query
}
catch(PDOException $e) {
echo 'Exception -> ';
var_dump($e->getMessage());
}

Затем обратите внимание, что 200 ответ означает, что ваш запрос Ajax успешно выполнен. Если вы получаете 500 ответов, проверьте свою конфигурацию. 500 Внутренняя ошибка сервера — это очень общий код состояния HTTP. Это означает, что что-то пошло не так на веб-сайте, и веб-сервер не может точно указать, что именно, поэтому не может выполнить запрос, сделанный клиентом. Это не относится к клиенту, и ошибка находится на запрошенной веб-странице / веб-сайте, который находится на сервере. Этот код состояния можно рассматривать как «всеобъемлющую» ошибку сервера веб-сервера.

0

За последние 24 часа нас посетили 11378 программистов и 1104 робота. Сейчас ищут 190 программистов …


  1. Collesss

    С нами с:
    20 июн 2015
    Сообщения:
    6
    Симпатии:
    0

    вообщем попытался сделать чат сначала делал у себя на компе с на open server работает просто идеально , потом перенёс на хостинг от cp.hostink.ru создал там базу данных создал нужные таблицы залил скрипты задал хост юзера название базы пароль и тут понеслась POST http://a4755.hostest.ru/chatread.php 500 (Internal Server Error)
    вот скрипты

    1. $dsn = «mysql:host=$db_host;dbname=$db_name;charset=$charset«;
    2.     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    3.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    4. $pdo = new PDO($dsn, $db_users, $db_pass, $opt);
    1. <link rel=’stylesheet’ href=’chat.css’>
    2. <form action=’chat.php’ method=’POST’>
    3. <input type=’text’ name=’name’>
    4. <input type=’submit’ value=’войти в чат’>
    5. <link rel=’stylesheet’ href=’chat.css’>
    6. <input type=’hidden’ value=’$name‘ id=’name’>
    7. <input type=’text’ value=» id=’text’>
    8. <button onclick=’send()’>отправить</button>
    9. <script src=’chat.js’></script>

    1. $pdo->query(«INSERT INTO `chat`(`time`, `name`, `message`) VALUES (‘$time‘,’$name‘,’$mess‘)»);
    2. $timedelete = $pdo->query(«SELECT `timedelete` FROM `timedelete`»);
    3. $delete = $timedelete->fetch(PDO::FETCH_LAZY);
    4.     $pdo->query(«UPDATE `timedelete` SET `timedelete`=’$time‘»);
    5.     $pdo->query(«DELETE FROM `chat` WHERE `time`<=’$time‘»);
    1. $lasttime = $_POST[«lasttime»];
    2. $read = $pdo->query(«SELECT `time`, `name`, `message` FROM `chat` WHERE `time`>’$lasttime‘ ORDER BY `chat`.`time` ASC «);
    3. while($row = $read->fetch(PDO::FETCH_LAZY))
    4.     $mesage[] = array($row[«time»],$row[«name»], $row[«message»]);
    1. var timer = setInterval(function(){readchat();},1000);
    2. var jsonchat = new XMLHttpRequest();
    3. jsonchat.open(‘POST’,‘chatread.php’,true);
    4. //jsonchat.setRequestHeader(‘Content-Type’, ‘application/json’);
    5. jsonchat.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
    6. jsonchat.send(«lasttime=»+savelasttime);
    7. jsonchat.onreadystatechange = function chattext() 
    8.     if (jsonchat.readyState != 4) return;
    9.     if(jsonchat.status == 200)
    10.         if(jsonchat.responseText)
    11.         jsontext = JSON.parse(jsonchat.responseText);
    12. //        console.log(jsontext[1][1]);
    13. //        console.log(typeof jsontext);
    14.         for(var i = 0; i < jsontext.length; i++)
    15.             var li = document.createElement(‘tr’);
    16.             li.innerHTML = «<td>»+jsontext[i][1]+«:»+«<td>»+«<td>»+jsontext[i][2]+«<td>»;
    17.             var text = table.appendChild(li);
    18.             //console.log(jsontext[i][0]);
    19.             //console.log(jsontext[i][1]);
    20.         savelastid = jsontext[jsontext.length  1][0];
    21.         document.getElementById(«chat»).scrollTop = document.getElementById(«chat»).scrollHeight;
    22.         //console.log(document.getElementById(«chat»).scrollHeight);
    23.     var name = document.getElementById(«name»).value;
    24.     var mess = document.getElementById(«text»);
    25. //    name = encodeURIComponent(name);
    26. var otp = new XMLHttpRequest();
    27. otp.open(‘POST’,‘chatadd.php’,true);
    28. otp.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
    29. otp.send(«name=»+name+«&»+«mess=»+mess.value);
    30. document.getElementById(«text»).value = »;

    и ещё ошибка появлялась в консоли POST http://a4755.hostest.ru/chatread.php 500 (Internal Server Error) ссылаясь на 22 строку в js коде
    вот логи ошибок

    1. [12Dec2015 23:07:13 Europe/Moscow] PHP Notice:  Undefined index: name in /home/a4755/public_html/chat.php on line 3
    2. [12Dec2015 23:07:33 Europe/Moscow] PHP Fatal error:  Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000] [2019] Unknown character set’ in /home/a4755/public_html/database.php:11
    3. #0 /home/a4755/public_html/database.php(11): PDO->__construct(‘mysql:host=loca…’, ‘a4755_1’, ‘пасс который ненужен для показа в данном случае’, Array)
    4. #1 /home/a4755/public_html/chatread.php(2): include(‘/home/a4755/pub…’)
    5.   thrown in /home/a4755/public_html/database.php on line 11

    первая ошибка [12-Dec-2015 23:07:13 Europe/Moscow] PHP Notice: Undefined index: name in /home/a4755/public_html/chat.php on line 3 понятна её исправил а как быть с остальными?
    помогите плиз если не лень.

    PHP, JavaScript, SQL и другой код пишите внутри тегов

    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]


  2. denis01

    Команда форума
    Модератор


  3. Abyss

    Ну для начала «PDO::FETCH_LAZY» превращается в «PDO::FETCH_ASSOC»
    Потом вместо цикла посмотри в сторону $pdo->fetchAll , ну и prepare & execute с биндингом.
    В остальном ставь периодический die(«MY MARK»); и отлавливай. Лень углубляться.


  4. denis01

    Команда форума
    Модератор


  5. Collesss

    С нами с:
    20 июн 2015
    Сообщения:
    6
    Симпатии:
    0

  • #1

<?php
// Массив с параметрами подключения к базе данных
return array(
‘host’ => ‘localhost’,
‘dbname’ => ‘234234’,
‘user’ => ‘234234’,
‘password’ => ‘234234!’,
);

Цитата Ответ

  • #2

<?php

/**
*
*/
class Db
{

public static function getConnection()
{

$paramsPath = ROOT . ‘/config/database.php’;

$params = include($paramsPath);

$dsn = «mysql:host={$params[‘host’]};dbname={$params[‘dbname’]}»;

$db = new PDO($dsn, $params[‘user’], $params[‘password’], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]);

$db->exec(«set names utf8»);

return $db;
}

}

Цитата Ответ

  • #3

базу прописываю но ошибка 500

pligin


  • #4

посмотри пример подключения PDO в ФФ

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

pligin


  • #7

какие данные прислать чтобы ты сделал подключение пдо?

Я получаю сообщение об ошибке, когда пытаюсь получить результат запроса PDO. Я сузил его до содержимого столбца, но я не уверен, почему это вызывает это или как это исправить. Это не типичная ошибка PHP, так как в журнале ошибок ничего нет. На самом деле, я думаю, что это вообще приводит к сбою PHP. Есть идеи, в чем проблема?

Примечание: переменная DB — это PDO-соединение с ODBC. (переход на MSSQL)

$query = $Z->DB->query("SELECT TOP 1 id, ticket, typeid, issued, comment, privatecomment FROM Handheld_IncomingTickets WHERE processed is null ORDER BY issued asc");
// No error.
if (!$query->execute()) {
    $moreData = false;
    echo dump($query->errorInfo()) ." ".__FILE__." at Line: ".__LINE__;
    break;
}
// No error.
$record = $query->fetch(PDO::FETCH_ASSOC);
// ERROR!

Это содержимое столбца комментариев одной из записей, вызывающих ошибку 500. Это просто тестовые данные, в столбце комментариев не будет дампа переменной $_POST в производстве, но я не понимаю, почему это имеет значение. Я мог бы удалить все значения, которые выглядят так, но если я не выясню причину проблемы, я не могу быть уверен, что это не повторится снова с достоверными данными.

array (   'act' => 'push',   'ticket' => '35-0191',   'ticket_int' => '191',   'vehicleid' => 'null',   'plate' => '028RLS',   'platetypeid' => 'null',   'provid' => '9',   'makeid' => '1',   'typeid' => '1',   'colourid' => '1',   'year' => 'null',   'locationid' => 'null',   'permitno' => 'null',   'sempermitid' => 'null',   'tickettype' => 'null',   'issued' => '2012-10-02%2013%3A22%3A31',   'violationtypeid' => 'null',   'writer' => '17',   'fine' => 'null',   'towing' => '',   'comment' => '',   'privatecomment' => '',   'synced' => 'null', )

Это ошибка, которую я вижу в журналах событий на сервере.

Faulting application name: php-cgi.exe, version: 5.3.12.0, time stamp: 0x4fa94d46
Faulting module name: php5.dll, version: 5.3.12.0, time stamp: 0x4fa94db5
Exception code: 0xc0000005
Fault offset: 0x0000c3b6
Faulting process id: 0x2a0
Faulting application start time: 0x01cdaadbbdc7fb98
Faulting application path: C:Program Files (x86)PHPv5.3php-cgi.exe
Faulting module path: C:Program Files (x86)PHPv5.3php5.dll
Report Id: fbc37d92-16ce-11e2-9dcf-ca21ba90502f

When the security update came out, I updated several 7.51 sites to 7.52 using the SSH sequence of:

drush pm-refresh [rf]
drush cache-clear all [cc all]
drush archive-dump [ard]
drush pm-update [up]

I’ve done this many times before with no issue. But this time, all of my sites suddenly started doing:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator …@testdomain.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Apache/2.x.xx at testdomain.com Port 80

I went into CPanel and viewed the logs, and the only thing that showed up was:
“[timestamp] SoftException in Application.cpp:261 : File «/…/index.php» is writeable by group …”

So, in my SSH, I did ls -al and sure enough, all of the .php files had permissions of -rw-rw-r--. So, I did chmod 644 *.php and verified that they were now -rw-r--r--, and then, voila, most of the sites started working again!

One site started generating an error to the effect that PDO was not installed or enabled in database.inc (I forget the exact error and no longer have it copied to my clipboard, and I’m not about to deliberately generate it again). That one turned out to be because a new php.ini had been written to the site root with the previous one renamed to php.ini.bak. The new one was exactly two characters longer than the old one. So, I edited both, and found that two lines had been commented out at the beginning, where I had manually enabled the PDO extension before. Uncommented those, and now that site works as well.

So, apparently the Drupal 7.52 core update script, for whatever reason, is setting the .PHP files to group-writeable, and Apache on my server is apparently set to not serve those for security reasons, generating HTTP 500 Internal Server Error instead. Also, it apparently comments out any lines in a custom php.ini file in the site root that enable PHP extensions, or at least the PDO extensions.

Workarounds:

For HTTP 500 Internal Server Error:

From SSH or other means of getting at a command prompt. do:
chmod 644 *.php
or, if you prefer:
chmod g-w *.php

For PDO extension missing error:

Edit custom php.ini file and uncomment the lines that enable the PDO extension.

Понравилась статья? Поделить с друзьями:
  • Pdm b100b13 ошибка вольво
  • Pdh dll windows 10 ошибка
  • Pci контроллер simple communications код ошибки 28
  • Pci контроллер simple communications драйвер как исправить
  • Pdflatex windows api error 5