Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.20;
Скачать: CL | DM;

Вниз

Туплю (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.024 c
2-1213825037
light-blr
2008-06-19 01:37
2008.07.20
Как заставить программу ждать, пока выполнится вызванная другая?


2-1214204601
lewka-serdceed
2008-06-23 11:03
2008.07.20
Дополнительеая информация о файле


11-1191915697
Nikfel
2007-10-09 11:41
2008.07.20
Как уменьшить еще сильней программу на kol.


2-1213686010
webpauk
2008-06-17 11:00
2008.07.20
Найти MDI


2-1213686301
MaryM
2008-06-17 11:05
2008.07.20
Проконсультируйте по работе с объемными файлами