Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
ВнизТуплю (MySQLi+PHP) Найти похожие ветки
← →
ProgRAMmer Dimonych © (2008-06-04 20:31) [0]Начал потихоньку осваиваться с MySQLi.
Собственно, проблема. Есть скрипт на PHP, который должен вывести страницу (скажем, index.php) и "библиотека" функций, которая подключается к этому скрипту (MyLib.php).
Исходник index.phpdefine("TextID","index");
include("Lib/MyLib.php");
$DB=OpenDB();
$TheText=GetTheText($DB,TextID);
echo $TheText;
CloseDB($DB);
Исходник MyLib.phpinclude("Settings.php");
function OpenDB()
{
$DBLink=new MySQLi(DBHost,DBUser,DBPass,DBName);
$DBLink->Query("SET NAMES "cp1251"");
return $DBLink;
}
function CloseDB($DBLink)
{
$DBLink->Close();
}
function GetHTML($DBLink,$CID)
{
$Stmt=$DBLink->Prepare("SELECT HText FROM Texts WHERE ID=? LIMIT 1");
$Stmt->Bind_Param("s",$CID);
$Stmt->Execute();
$Stmt->Bind_Result($Res);
$Stmt->Fetch();
$Stmt->Close();
return $Res;
}
В Settings.php объявлены константы для работы с БД, все значения правильные. Таблица Texts в БД существует, в ней есть поле HText.
Но при запуске скрипта index.php в броузер не выводится ничего.
Знаю, что где-то тупо что-то упускаю, но что - вот уже около полутора часов кручу :(
← →
Eraser © (2008-06-04 20:36) [1]> [0] ProgRAMmer Dimonych © (04.06.08 20:31)
для начала надо включить вывод ошибок и замечаний.
даже без него, можно самому повставлять вывод отладки в код, все сразу ясно станет.
← →
ProgRAMmer Dimonych © (2008-06-04 20:42) [2]> Eraser © (04.06.08 20:36) [1]
Вставлял. Для $CID по всей функции отображается то значение, которое должно быть. Включение отображения всех предупреждений результатов не дало. :(
← →
ketmar © (2008-06-04 20:52) [3]>[2] ProgRAMmer Dimonych © (2008-06-04 20:42:00)
значит, ID"а такого нет.
---
All Your Base Are Belong to Us
← →
ProgRAMmer Dimonych © (2008-06-04 20:55) [4]> ketmar © (04.06.08 20:52) [3]
Лазил MyAdmin"ом, всё есть: таблица, поля такие. ID со значением index - единственная запись в таблице. :(
← →
Zeqfreed © (2008-06-04 21:02) [5]
> $TheText=GetTheText($DB,TextID);
> function GetHTML($DBLink,$CID)
← →
ProgRAMmer Dimonych © (2008-06-04 21:04) [6]> Zeqfreed © (04.06.08 21:02) [5]
А, пардон, из старого варианта скопипастил (экспериментировал, чтобы не угадать случайно имя уже существующей функции, константы или ещё какой-нибудь радости). В реальном варианте имя функции в вызове и в описании совпадают. :(
← →
ketmar © (2008-06-04 21:26) [7]>[6] ProgRAMmer Dimonych © (2008-06-04 21:04:00)
обалдеть. так ты нам вообще показываешь невесть что. ну, ты понял тогда — в 17-й строке баг.
---
Understanding is not required. Only obedience.
← →
ketmar © (2008-06-04 21:27) [8]>[5] Zeqfreed © (2008-06-04 21:02:00)
оффтоп: я уже разочаровался в data models. заколебался делать методы на всякие нужные штуки. всё-таки это надо делать на нормальном языке со средствами метапрограммирования, а не на пыхе…
---
All Your Base Are Belong to Us
← →
Zeqfreed © (2008-06-04 21:35) [9]> ketmar © (04.06.08 21:27) [8]
Ну в принципе, если использовать наследование там, где уместно, то вроде жить можно :)
← →
ProgRAMmer Dimonych © (2008-06-04 21:37) [10]OK, полный вариант...
index.php<?
define("CodeID","index");
include("Lib/Core.php");
$DB=OpenDB();
$HTMLCode=GetHTML($DB,CodeID);
echo($HTMLCode);
CloseDB($DB);
?>
Core.php<?
include("Settings.php");
function OpenDB()
{
$DBLink=new MySQLi(DBHost,DBUser,DBPass,DBName);
$DBLink->Query("SET NAMES "cp1251"");
return $DBLink;
}
function CloseDB($DBLink)
{
$DBLink->Close();
}
function GetHTML($DBLink,$CID)
{
Error_Reporting(E_ALL);
MySQLi_Report(MYSQLI_REPORT_ALL);
$Stmt=$DBLink->Prepare("SELECT HText FROM Texts WHERE ID=? LIMIT 1");
$Stmt->Bind_Param("s",$CID);
$Stmt->Execute();
$Stmt->Bind_Result($Res);
$Stmt->Fetch();
$Stmt->Close();
return $Res;
}
?>
Этот вариант не работает. В Settings.php прописаны найтроки для работы с локальной БД, в которой, собственно, и находится таблица Texts. Все функции MySQLi, возвращающие сообщения об ошибках, молчат и возвращают код отсутствия ошибки (т.е. 0). Никаких предупреждений не выводится. В броузер не поступает ни единого символа. :(
← →
ketmar © (2008-06-04 21:43) [11]>[9] Zeqfreed © (2008-06-04 21:35:00)
так штука в том, что нечего особо наследовать.
точнее, меня гложет мысль, что надо было сначала сделать диаграммок, план, а потом писать. но это не наш путь, да и кода я уже понастучал. %-)
>[10] ProgRAMmer Dimonych © (2008-06-04 21:37:00)
Error_Reporting — в первую строку. это раз.
я очень интересуюсь знать, прочитал ли ты о том, что php — регистрозависимый? лично у меня в документации имена методов не содержат ни одной заглавной буквы. ня?
---
All Your Base Are Belong to Us
← →
ProgRAMmer Dimonych © (2008-06-04 21:49) [12]> ketmar © (04.06.08 21:43) [11]
> >[10] ProgRAMmer Dimonych © (2008-06-04 21:37:00)
> Error_Reporting — в первую строку. это раз.
Ни одного предупреждения, ни одной ошибки не выводит.
> я очень интересуюсь знать, прочитал ли ты о том, что php
> — регистрозависимый? лично у меня в документации имена методов
> не содержат ни одной заглавной буквы. ня?
Я в курсе. Но с методами чего-то ни разу проблем не было. Сменил все на строчные - проблему не решает.
← →
ProgRAMmer Dimonych © (2008-06-04 22:10) [13]А это не может как-нибудь быть связано с БД? Таблица Texts содержит 2 поля.
Поле ID типа TINYTEXT, длины 5, помечено как PRIMARY KEY.
Поле HText типа LONGTEXT без указания длины, без дополнительных пометок.
Вся таблица в cp1251_general_ci.
← →
ketmar © (2008-06-04 22:11) [14]>[12] ProgRAMmer Dimonych © (2008-06-04 21:49:00)
не верю. репортинги на самую верхнюю строку, дамп базы в студию. только что закопипастил, чтобы глазами не проверять: выбирает.
---
All Your Base Are Belong to Us
← →
ProgRAMmer Dimonych © (2008-06-04 22:19) [15]XML-дамп.
<?xml version="1.0" encoding="windows-1251" ?>
<!--
-
- phpMyAdmin XML Dump
- version 2.6.1
- http://www.phpmyadmin.net
-
- Хост: localhost
- Время создания: Июн 04 2008 г., 21:20
- Версия сервера: 5.0.45
- Версия PHP: 5.2.4
-->
<!--
- БД: `Moika`
-->
<Moika>
<!-- таблица Texts -->
<Texts>
<ID>index</ID>
<HText><HTML>
<HEAD>
<TITLE>%SiteName%</TITLE>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Windows-1251">
<LINK REL="stylesheet" TYPE="text/css" HREF="style.css">
</HEAD>
<BODY>
<H1>%SiteName%</H1>
%SiteMenu%
</BODY>
</HTML></HText>
</Texts>
</Moika>
← →
ProgRAMmer Dimonych © (2008-06-04 22:21) [16]P.S. Естественно, содержимое поля HText было выведено с использованием &-последовательностей.
← →
ketmar © (2008-06-04 22:31) [17]>[15] ProgRAMmer Dimonych © (2008-06-04 22:19:00)
>XML-дамп.
Ктулху съест тебя первого. дамп бывает только SQL-ный.
кстати, XML невалидный. %-)
я тебе не верю. одно из двух: или ты не поставил репортинг в начало, или вуглускры.
алсо, я надеюсь, хост не виндовый?
---
Understanding is not required. Only obedience.
← →
ProgRAMmer Dimonych © (2008-06-04 22:33) [18]ОК, SQL-дамп.
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Июн 04 2008 г., 21:34
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `Moika`
--
-- --------------------------------------------------------
--
-- Структура таблицы `Texts`
--
CREATE TABLE `Texts` (
`ID` tinytext NOT NULL,
`HText` longtext NOT NULL,
PRIMARY KEY (`ID`(5))
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
--
-- Дамп данных таблицы `Texts`
--
INSERT INTO `Texts` VALUES ("index", "<HTML>\r\n<HEAD>\r\n<TITLE>%SiteName%</TITLE>\r\n<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Windows-1251">\r\n<LINK REL="stylesheet" TYPE="text/css" HREF="style.css">\r\n</HEAD>\r\n\r\n<BODY>\r\n<H1>%SiteName%</H1>\r\n%SiteMenu%\r\n</BODY>\r\n</HTML>");
Хост виндовый (Денвер, вчера вечером скачал последнюю версию).
← →
ketmar © (2008-06-04 23:04) [19]>[18] ProgRAMmer Dimonych © (2008-06-04 22:33:00)
>Хост виндовый
вот на этом лично я разборы закончил. что там и как на винде — пусть балмер разбирается. в пень такие хосты.
---
All Your Base Are Belong to Us
← →
Style © (2008-06-05 10:30) [20]А вот так не пробовал делать?
<?
print 1;
define("CodeID","index");
print 2;
include("Lib/Core.php");
print 3;
$DB=OpenDB();
print 4;
$HTMLCode=GetHTML($DB,CodeID);
print 5;
echo($HTMLCode);
print 6;
CloseDB($DB);
?>
На какой строчке встанет?
Хотя у меня есть сомнения на счетecho class_exists("MySQLi") ? "Все в порядке" : "Пошел нафик - Not MySQLi class exists!";
← →
ProgRAMmer Dimonych © (2008-06-05 10:46) [21]> Style © (05.06.08 10:30) [20]
Ровненько вывело все 6 цифер, всё в порядке. Сами методы класса, используемые в функции GetHTML() тоже возвращают отсутствие ошибки.
Насчёт присутствия MySQLi - всё точно, есть такой. Это последняя версия Денвер"а (ну, я уже писал), а вчера с вечера сделал не-object-oriented без параметров (обычный запрос, в который подставляется переданное значение) - всё заработало. Теперь дикое желание разобраться, что не так в этом варианте. Такео ощущение, что почему-то не привязываются переменные в Bind_Param() и Bind_Result(), но почему... Десять раз перечитывал справку по этим методам - ничего, ни намёка.
← →
ProgRAMmer Dimonych © (2008-06-05 10:47) [22]Вру, вчера сделал object-oriented, но без параметров, так что что-то, похоже, не так с соответствующим куском функции.
← →
ketmar © (2008-06-05 11:24) [23]>[22] ProgRAMmer Dimonych © (2008-06-05 10:47:00)
хинт: винда, чо там.
ещё раз: у меня на LLMP всё работает как часы.
---
Understanding is not required. Only obedience.
← →
Style © (2008-06-05 14:26) [24]Может логирование запросов на MySql включить и посмотреть вообще
выполняется запрос или нет??
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.044 c