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
36.1k17 gold badges77 silver badges93 bronze badges
asked Dec 10, 2011 at 15:47
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 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
1,69015 silver badges23 bronze badges
answered Mar 31, 2022 at 14:36
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 программистов …
-
- С нами с:
- 20 июн 2015
- Сообщения:
- 6
- Симпатии:
- 0
вообщем попытался сделать чат сначала делал у себя на компе с на open server работает просто идеально , потом перенёс на хостинг от cp.hostink.ru создал там базу данных создал нужные таблицы залил скрипты задал хост юзера название базы пароль и тут понеслась POST http://a4755.hostest.ru/chatread.php 500 (Internal Server Error)
вот скрипты-
$dsn = «mysql:host=$db_host;dbname=$db_name;charset=$charset«;
-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
-
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
-
$pdo = new PDO($dsn, $db_users, $db_pass, $opt);
-
<link rel=’stylesheet’ href=’chat.css’>
-
<form action=’chat.php’ method=’POST’>
-
<input type=’text’ name=’name’>
-
<input type=’submit’ value=’войти в чат’>
-
<link rel=’stylesheet’ href=’chat.css’>
-
<input type=’hidden’ value=’$name‘ id=’name’>
-
<input type=’text’ value=» id=’text’>
-
<button onclick=’send()’>отправить</button>
-
<script src=’chat.js’></script>
-
$pdo->query(«INSERT INTO `chat`(`time`, `name`, `message`) VALUES (‘$time‘,’$name‘,’$mess‘)»);
-
$timedelete = $pdo->query(«SELECT `timedelete` FROM `timedelete`»);
-
$delete = $timedelete->fetch(PDO::FETCH_LAZY);
-
$pdo->query(«UPDATE `timedelete` SET `timedelete`=’$time‘»);
-
$pdo->query(«DELETE FROM `chat` WHERE `time`<=’$time‘»);
-
$lasttime = $_POST[«lasttime»];
-
$read = $pdo->query(«SELECT `time`, `name`, `message` FROM `chat` WHERE `time`>’$lasttime‘ ORDER BY `chat`.`time` ASC «);
-
while($row = $read->fetch(PDO::FETCH_LAZY))
-
$mesage[] = array($row[«time»],$row[«name»], $row[«message»]);
-
var timer = setInterval(function(){readchat();},1000);
-
var jsonchat = new XMLHttpRequest();
-
jsonchat.open(‘POST’,‘chatread.php’,true);
-
//jsonchat.setRequestHeader(‘Content-Type’, ‘application/json’);
-
jsonchat.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
-
jsonchat.send(«lasttime=»+savelasttime);
-
jsonchat.onreadystatechange = function chattext()
-
if (jsonchat.readyState != 4) return;
-
if(jsonchat.status == 200)
-
if(jsonchat.responseText)
-
jsontext = JSON.parse(jsonchat.responseText);
-
// console.log(jsontext[1][1]);
-
// console.log(typeof jsontext);
-
for(var i = 0; i < jsontext.length; i++)
-
var li = document.createElement(‘tr’);
-
li.innerHTML = «<td>»+jsontext[i][1]+«:»+«<td>»+«<td>»+jsontext[i][2]+«<td>»;
-
var text = table.appendChild(li);
-
//console.log(jsontext[i][0]);
-
//console.log(jsontext[i][1]);
-
savelastid = jsontext[jsontext.length — 1][0];
-
document.getElementById(«chat»).scrollTop = document.getElementById(«chat»).scrollHeight;
-
//console.log(document.getElementById(«chat»).scrollHeight);
-
var name = document.getElementById(«name»).value;
-
var mess = document.getElementById(«text»);
-
// name = encodeURIComponent(name);
-
var otp = new XMLHttpRequest();
-
otp.open(‘POST’,‘chatadd.php’,true);
-
otp.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
-
otp.send(«name=»+name+«&»+«mess=»+mess.value);
-
document.getElementById(«text»).value = »;
и ещё ошибка появлялась в консоли POST http://a4755.hostest.ru/chatread.php 500 (Internal Server Error) ссылаясь на 22 строку в js коде
вот логи ошибок-
[12—Dec—2015 23:07:13 Europe/Moscow] PHP Notice: Undefined index: name in /home/a4755/public_html/chat.php on line 3
-
[12—Dec—2015 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
-
#0 /home/a4755/public_html/database.php(11): PDO->__construct(‘mysql:host=loca…’, ‘a4755_1’, ‘пасс который ненужен для показа в данном случае’, Array)
-
#1 /home/a4755/public_html/chatread.php(2): include(‘/home/a4755/pub…’)
-
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)):-
[b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
-
Команда форума
Модератор -
Ну для начала «PDO::FETCH_LAZY» превращается в «PDO::FETCH_ASSOC»
Потом вместо цикла посмотри в сторону $pdo->fetchAll , ну и prepare & execute с биндингом.
В остальном ставь периодический die(«MY MARK»); и отлавливай. Лень углубляться. -
Команда форума
Модератор -
- С нами с:
- 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
-
#4
посмотри пример подключения PDO в ФФ
и потом меняй все запросы в своей ферме, как в том скрипте на гитхаб.
если ты оплатишь заказ по выплатам, то подключение я сам сделаю, т.к. я выплаты буду делать с PDO
-
#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.