IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Вопросы по работе с MySQL на PHP (https://www.imho.ws/showthread.php?t=63963)

CEO 12.07.2004 13:35

Вопросы по работе с MySQL на PHP
 
Как скриптом определить:
1. есть ли на сервере MySQL;
2. имя MySQL базы.

dr-evil 12.07.2004 13:48

хм, если подключится - значит есть ;)

Merlin Cori 12.07.2004 13:52

1. попробовать соедениться. идентификатор соединеия в случае успеха, false в противном
2. аналогично 1 только не connect, а select_db
А получить список баз, тебе никто не даст

Hubbitus 12.07.2004 15:07

Цитата:

Merlin Cori:
А получить список баз, тебе никто не даст
Кстати некоторые хостеры дают получить список (не буду показывать пальцем), поэтому если можешь подключиться к серверу - попробуй.

CEO 12.07.2004 15:40

Понятно.
А каким запросом можно узнать о наличии определённой таблицы в базе Mysql ?

Merlin Cori 12.07.2004 15:53

Hubbitus это скорее исключение, чем правило :)

CEO

PHP код:

$conn_id=mysql_connect("base""user""password") or die ("Not connected");
mysql_select_db("base",$conn_id) or die ("Base not selected");
$query=mysql_query("SELECT * from table"); 

если удачно, то в $query true, иначе false

CEO 12.07.2004 21:47

Merlin Cori Спсибо за конкретный пример. А не подскажешь ли, почему у меня это не совсем работает:
PHP код:

<?php
$conn_id
=mysql_connect("base""user""password") or die ("Not connected");
mysql_select_db("base",$conn_id) or die ("Base not selected");
$query=mysql_query("SELECT * from user");
if (
$query) {
$query ='CREATE TABLE user ( usID INT(5) NOT NULL, usName VARCHAR(50) NOT NULL, usPWD VARCHAR(50) NOT NULL );'
$result=mysql_query ($query);
}
echo 
$result;
?>

Выдает сообщение
Undefined variable: result in testsql.php on line 9

Fiery_Fenix 13.07.2004 03:47

Вот так правильнее:
....
$result="No result";
if ($query) { ....
Переменная result определена в ответвлении которое не выполняется - вот парсер и матерится....

Hubbitus 13.07.2004 04:32

Цитата:

CEO:
Код:

<?php
$conn_id=mysql_connect("base", "user", "password") or die ("Not connected");
mysql_select_db("base",$conn_id) or die ("Base not selected");
$query=mysql_query("SELECT * from user");
if ($query) {
$query ='CREATE TABLE user ( usID INT(5) NOT NULL, usName VARCHAR(50) NOT NULL, usPWD VARCHAR(50) NOT NULL );';
$result=mysql_query ($query);
}
echo $result;
?>

Выдает сообщение
Undefined variable: result in testsql.php on line 9
Лучше воспользоваться функцией mysql_error(), например так:
Код:

<?
$conn_id=mysql_connect("base", "user", "password") or die ("Not connected");
mysql_select_db("base",$conn_id) or die ("Base not selected");
$query=mysql_query("SELECT * from user");
print mysql_eror();
if ($query) {
$query ='CREATE TABLE user ( usID INT(5) NOT NULL, usName VARCHAR(50) NOT NULL, usPWD VARCHAR(50) NOT NULL );';
$result=mysql_query ($query);
print mysql_error();
}
?>

Если возникнет любая ошибка, то эта функция выведет ее краткое описание, если все нормально - то ничего.

Merlin Cori 13.07.2004 10:32

CEO
у тебя строка запроса заканчивается символом ; убери его.
Цитата:

$query ='CREATE TABLE user ( usID INT(5) INT(5) NOT NULL, usName VARCHAR(50) NOT NULL, usPWD VARCHAR(50) NOT NULL );';
запрос НЕ ДОЛЖЕН заканчиваться ;

CEO 13.07.2004 10:37

Спасибо за дельные советы, теперь стало понятнее.
Написал в скрипте так:
....
$query ='CREATE TABLE user ( usID INT(5) NOT NULL, usName VARCHAR(50) NOT NULL, usPWD VARCHAR(50) NOT NULL );';
$result=mysql_query ($query);
$result="No result";
print mysql_error();
Теперь выдает ошибку:
Table 'base.user' doesn't exist, хотя эта таблица должна была создаться.
Где моя ошибка?

Merlin Cori: Убрал ; ошибка осталась.

Merlin Cori 13.07.2004 11:16

CEO
все работает, только что у себя проверил.
Цитата:

Table 'base.user' doesn't exist
Это сообщение у тебя выдается в первом случае. Если нажать обновить, то скажет что уже существует

CEO 13.07.2004 14:35

Сам запрос действительно работает, табица не создавалась из-за неправильного условия:
было: $query=mysql_query("SELECT * from user");
if ($query) {... create table}
нужно : if (!$query) {...}

Merlin Cori 13.07.2004 14:39

CEO ааа.... ну я проверял напрямую без if

CEO 14.07.2004 18:59

Снова у меня не все впорядке с MySql.
Cкрипт должен создавать записи, получая данные из формы, однако записи не создаются. Помогите найти ошибку.
форма:
<form action="sql1.php" method="post">
<input type="text" name="name">
...
<input type="submit">
</form>
скрипт:
...
$HTTP_POST_VARS["$name"];
$link = mysql_connect($host, $user, $password);
if ($query = "INSERT INTO user VALUE ('$name')")
{ print("Пользователь добавлен\n");
} else { print("попробуйте еще раз\n");}
...

Fiery_Fenix 15.07.2004 02:46

Цитата:

CEO:
if ($query = "INSERT INTO user VALUE ('$name')")
Вообще-то должно быть так:
if (mysql_query("INSERT INTO 'user' ('name') VALUE ('$name')"))...
ЗЫ Люди, а кавычки в запросах ставить обязательно, а то оно пашет и без них нормально

CEO 15.07.2004 09:27

Fiery_Fenix: так работает, спасибо.

killhunter 21.07.2004 03:18

Вопрос новичка
Подскажите, пожалуйста, где здесь закралась ошибка:

<FORM ACTION="add.php" METHOD="post">
<INPUT TYPE="text" NAME="name">
<INPUT TYPE="submit" VALUE="go">
</FORM>

и код

<?
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "test";
$userstable = "g";

MYSQL_CONNECT($hostname,$username,$password) OR DIE("DOSN'T WORK");
@mysql_select_db("$dbName") or die("DOSN'T WORK");
$query = "INSERT INTO $userstable (g_name) VALUES ('$name')";
$result = MYSQL_QUERY($query);
MYSQL_CLOSE();
?>

В результате создается пустая строка, т.е. данные не передаются :confused:

Sheryld 21.07.2004 03:56

а у тебя RegisterGlobals = On?

если нет, то тогда нужно обращаться через глобальный массив:

$HTTP_POST_VARS['name'];

и вообще очень плохой код, как симантически, так и синтаксически...

Merlin Cori 21.07.2004 09:10

Если в запросе ты имя таблицы и значение ты указываешь через переменную, то это должно выгледеть так

<?
$hostname = "localhost";
$username = "root";
$password = "";
$dbName = "test";
$userstable = "g";

MYSQL_CONNECT($hostname,$username,$password) OR DIE("DOSN'T WORK");
@mysql_select_db("$dbName") or die("DOSN'T WORK");
$query = "INSERT INTO ".$userstable." (g_name) VALUES ('".$name."')";
$result = MYSQL_QUERY($query);
MYSQL_CLOSE();
?>

В противном случае у тебя имя таблицы получается не g, а $userstable

Sheryld 21.07.2004 15:29

а вот и нет, php допускает и такой синтаксис. дело все-таки в том, имхо, что не "видно" переменной $name, почему? я свой ответ написал, выше...

p.s.

$name = "whatevername";

echo "$name" . "<BR>"; //whatevername
echo '$name'. "<BR>"; //$name
echo $name . "<BR>"; //whatevername
echo "'$name'" . "<BR>"; //'whatevername'

Fiery_Fenix 21.07.2004 15:35

Цитата:

Merlin Cori:
$query = "INSERT INTO ".$userstable." (g_name) VALUES ('".$name."')";
Вполне спокойно будет работать и так:
$result=mysql_query("INSERT INTO '$userstable' (g_name) VALUES ('$name')");
2 killhunter:
Глянь еще переменную $result в которой должен быть номер строки в базе куда вставилась твоя инфа. По ходу, для отладки, в начало РНР скрипта можно вставить echo $name; чтобы глянуть что у тебя передается по POST.
ЗЫ Надо сразу писать $_GET['var'] или $_POST['var'], а то в последнем РНР (4.3.8 по-моему) простая передача переменных через Method=POST не катит :(, там RegisterGlobals = Off.
ЗЗЫ Исправил :)
ЗЗЗЫ Создал новую тему для разборок с RegisterGlobals :)

Sheryld 21.07.2004 15:37

как это метод пост не катит?

RegisterGlobals и должен быть off(что и сделали теперь по-умолчанию), а обращаться нужно через глобальный массив.

Merlin Cori 21.07.2004 15:39

Fiery_Fenix согласен, будет...... :)

Saruman 21.07.2004 16:18

Fiery_Fenix
register_globals=off по умолчанию начиная с 4.2.0, но на работе метода POST это никак не отражается. Просто все переданные скрипты переменные не регистрируются в качестве локальных, а доступны только через соответствующие массивы. Методы http тут не при чем.

PS: тем более, даже если нет доступа к изменению php.ini, никто не мешает положить в свой каталог htaccess и выставить такой register_globals, какой нужен.

Merlin Cori 21.07.2004 18:00

Похоже мы углубилсиь в теоретические изыскания и отклонились от темы.... :)
killhunter
ты внимательно посмотри на соответствие имен полей в таблице и скрипте

killhunter 21.07.2004 22:52

Спасибо всем большое. Поправил и разобрался.
Работает.
Пришлось поправить php.ini:

gpc_order = GPC
register_globals = On

magic_quotes_gpc = Off
magic_quotes_runtime = Off

safe_mode_protected_env_vars = Off

Merlin Cori 22.07.2004 09:23

killhunter
Цитата:

register_globals = On
не есть хорошо.
Лучше передаваемые переменные получать через массив
$HTTP_POST_VARS['name'], как сказал Sheryld


Часовой пояс GMT +4, время: 17:44.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.