Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];

Вниз

Туплю (MySQLi+PHP)   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2008-06-04 20:31) [0]

Начал потихоньку осваиваться с MySQLi.

Собственно, проблема. Есть скрипт на PHP, который должен вывести страницу (скажем, index.php) и "библиотека" функций, которая подключается к этому скрипту (MyLib.php).

Исходник index.php

define("TextID","index");
include("Lib/MyLib.php");
$DB=OpenDB();
$TheText=GetTheText($DB,TextID);
echo $TheText;
CloseDB($DB);


Исходник MyLib.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)
{
$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 было выведено с использованием &amp;-последовательностей.


 
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.037 c
15-1212432475
@!!ex
2008-06-02 22:47
2008.07.20
Нужен хост под SVN.


15-1212582144
123-ий
2008-06-04 16:22
2008.07.20
Skype


15-1212455954
brother
2008-06-03 05:19
2008.07.20
Мерцание 2х LCD мониторов (LG)


2-1213699641
Alex_C
2008-06-17 14:47
2008.07.20
Маштабирование окна


2-1213877006
Гость
2008-06-19 16:03
2008.07.20
TNT компонент и Clipboard





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский