конвертировать из mysql PHP скрипт в pdo

-4

Я на самом деле новичок в PDO

Здесь я пытаюсь получить данные из mysql и показать в xml.

Я сделал это с помощью mysql, но я не смог сделать это с помощью PDO.

Вот мой PHP-код

<?php

error_reporting(E_ALL);

$host = "localhost";
$user = "root";
$pass = "root";
$database = "my_db";

// replace by a real *.xsl file, e.g.
// $xslt_file = "exam.xsl";
$xslt_file = FALSE;
// If true, will output XML without XSLT

$raw = TRUE;

$SQL_query = "SELECT * FROM 'battery' order by waste asc";

$DB_link = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $DB_link) or die ("Could not find or access the database.");
$result = mysql_query ($SQL_query, $DB_link) or die ("Data not found. Your SQL query didn't work... ");

$left = "<";
$right = ">";

if ($xslt_file or $raw) {
// we produce XML
header("Content-type: text/xml");
$XML = "<?xml version=\"1.0\"?>\n";
if (!$raw) $XML .= "<?xml-stylesheet href=\"$xslt_file\" type=\"text/xsl\" ?>";
}
else {
// we produce HTML. All XML tags are replaced by printable entities
$XML = "Don't forget to create an XSLT file .... <p>";
$XML .= "<pre>\n";
$left = "<";
$right = ">";
}

// root node
$XML .= $left . "result" . $right . "\n";
// rows
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$XML .= "\t" . $left. "row" . $right . "\n"; // creates either "<row>" or "<row>"
$i = 0;
// cells
foreach ($row as $cell) {
// Escaping illegal characters
$cell = str_replace("&", "&", $cell);
$cell = str_replace("<", "<", $cell);
$cell = str_replace(">", ">", $cell);
$cell = str_replace("\"", """, $cell);
$col_name = mysql_field_name($result,$i);
// creates the "<tag>contents</tag>" representing the column, either as XML or for display in HTML
$XML .= "\t\t" . $left . $col_name . $right . $cell . $left . "/" . $col_name . $right ."\n";
$i++;
}
$XML .= "\t" . $left. "/row" . $right . "\n";
}

$XML .= $left . "/result" . $right . "\n";

echo $XML;
if (!$xslt_file && !$raw) echo "</pre>";

?>

Я много пытаюсь, но я не смог сделать это с помощью PDO. Мне нужна помощь. Любая помощь будет оценена по достоинству.

Мой код PDO, который я пробовал,

  <?php
$dbtype = "mysql";
$dbhost = "localhost";
$dbname = "my_db";
$dbuser = "root";
$dbpass = "root";

$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

$xslt_file = FALSE;

$raw = TRUE;

$SQL_query = "SELECT * FROM 'battery' order by waste asc";
$result = $conn->query($SQL_query);

$left = "<";
$right = ">";

if ($xslt_file or $raw) {

header("Content-type: text/xml");
$XML = "<?xml version=\"1.0\"?>\n";
if (!$raw) $XML .= "<?xml-stylesheet href=\"$xslt_file\" type=\"text/xsl\" ?>";
}
else {

$XML = "Don't forget to create an XSLT file .... <p>";
$XML .= "<pre>\n";
$left = "<";
$right = ">";
}

$XML .= $left . "result" . $right . "\n";

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
$XML .= "\t" . $left. "row" . $right . "\n"; // creates either "<row>" or "<row>"
$i = 0;
// cells
foreach ($row as $cell) {
// Escaping illegal characters
$cell = str_replace("&", "&", $cell);
$cell = str_replace("<", "<", $cell);
$cell = str_replace(">", ">", $cell);
$cell = str_replace("\"", """, $cell);

$col_name = $result->fetchAll(PDO::FETCH_COLUMN);

// creates the "<tag>contents</tag>" representing the column, either as XML or for display in HTML
$XML .= "\t\t" . $left . $col_name . $right . $cell . $left . "/" . $col_name . $right ."\n";
$i++;
}
$XML .= "\t" . $left. "/row" . $right . "\n";
}

$XML .= $left . "/result" . $right . "\n";

echo $XML;
if (!$xslt_file && !$raw) echo "</pre>";

?>

Но он ничего не показывает

спросил(а) 2021-01-19T20:19:19+03:00 2 месяца, 3 недели назад
1
Решение
135

вы подключаетесь к базе данных следующим образом:

$dbhost = "localhost";
$dbname = "testcreate";
$dbuser = "root";
$dbpass = "mysql";

try {
$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname.';charset=utf-8', ''.$dbuser.'', ''.$dbpass.'');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Error : <br>' . $e->getMessage();
}

PS: Вам не нужна попытка и уловка, но мы использовали, чтобы получить ошибку и обработать ее в хорошем виде, как мы хотим

и следующий запрос:

 $db->query(SELECT * FROM node WHERE node_name='$nodename'");

и мы получаем его вот так:

 $query = $db->query(SELECT * FROM node WHERE node_name='$nodename'");
$row = $query->fetch(PDO::FETCH_OBJ);

и теперь вы используете имя $row->name например

здесь больше о PDO :: FETCH

    PDO :: FETCH_ASSOC: возвращает массив, индексированный по имени столбца, возвращенный в ваш результирующий набор

    PDO :: FETCH_BOTH (по умолчанию): возвращает массив, индексированный как с именем столбца, так и с номером столбца с 0-индексом, возвращаемым в результирующий набор

    PDO :: FETCH_BOUND: возвращает TRUE и присваивает значения столбцов в вашем результирующем наборе переменным PHP, которым они были
    связанный с методом PDOStatement :: bindColumn()

    PDO :: FETCH_CLASS: возвращает новый экземпляр запрашиваемого класса, сопоставляя столбцы набора результатов с именованными свойствами в
    класс. Если fetch_style включает PDO :: FETCH_CLASSTYPE (например,
    PDO :: FETCH_CLASS | PDO :: FETCH_CLASSTYPE), то имя класса
    определяется из значения первого столбца.

    PDO :: FETCH_INTO: обновляет существующий экземпляр запрашиваемого класса, сопоставляя столбцы набора результатов с именованными свойствами в
    класс

    PDO :: FETCH_LAZY: объединяет PDO :: FETCH_BOTH и PDO :: FETCH_OBJ, создавая имена переменных объекта по мере их доступа

    PDO :: FETCH_NUM: возвращает массив, индексированный по номеру столбца, возвращенный в ваш результирующий набор, начиная с столбца 0

    PDO :: FETCH_OBJ: возвращает анонимный объект с именами свойств, которые соответствуют именам столбцов, возвращенным в вашем результирующем наборе

ответил(а) 2021-01-19T20:19:19+03:00 2 месяца, 3 недели назад
43

Правильный способ получения имен столбцов

$q = $dbh->prepare("DESCRIBE tablename");
$q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN);

однако, поскольку вы получаете привязку, вы можете просто изменить свой цикл foreach на это:


foreach ($row as $col_name => $cell) {

Могут быть другие проблемы, вы пытались использовать print_r в результате каждого вызова функции PDO, чтобы проверить, в какой момент он не работает?

ответил(а) 2021-01-19T20:19:19+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема