Jump to content
  • 0

mysql основы


IceBars
 Share

Question

вы конечно извините за такой вопрос но:

как пшп + бд работает? У меня денвер -- как добавить базу данных удалить ее добавить таблицу добавить строку? Я из документации код вставлял мне ошибку выдовало:)

Link to comment
Share on other sites

  • Answers 77
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0
Ну а что касается добавления вообще, то я не вижу никакой проверки на отправку сообщения. Делайте хотя бы

if(!empty($_POST))

О! Кстати, Игорь, скажите мне, вы как уважаемые мною программист: Чем отличается запись: if(!empty($_POST)) и if($_POST) ? а если нет, то зачем писать больше ? а если есть, то не затруднит ли вас сделать маленький наглядный пример, извините, что не в тему, но просто любопытно.

Link to comment
Share on other sites

  • 0

Ну тут в чём соль. PHP не имеет строгой типизации и поэтому всё работает как попало. Например empty($var) сработает, если $var=0, $var='' или $var=array(). Я использую «!empty» для $_POST, чтобы понять, что был сабмит формы, или как альтернативу «isset($var) && $var!=0 && $var!=''». Что касается конструкции «if($_POST)», так она должна, по идее, означать что $_POST имеет значение false, но пустой массив тоже подходит под эту конструкцию, то есть

$arr=array();
echo ($arr) ? "true" : "false";

выведет «false». Ну а вообще переменные на «наличие и непустоту» надо проверять при помощи «empty», так как иначе, если такой переменной не было создано, будет ноутис «Undefined variable», ну а поскольку $_POST — массив глобальный и он всегда определён, то проверка вида «if($_POST)» даёт ожидаемый результат. Я вообще считаю, что PHP, как первый язык программирования — абсолютное зло. Начинать надо, например, с си — с него пеерйти на пхп очень просто, а вот наоборот просто капец как сложно.

Link to comment
Share on other sites

  • 0
на сколько я понимаю, то empty - это проверка на "пустоту переменной", а ! - на ее существование.

вроде так...

А вот и не так. Проверка на существование — isset. Empty тоже проверяет на существование. То есть «var_dump(empty($var))» вернёт true, а «var_dump(!$var)» тоже true, но будет ноутис (конечно, при условии, что переменная $var не определена).

Link to comment
Share on other sites

  • 0

То есть, если разложить по порядку, то будет примерно так:

1) ! - проверка на пустоту переменной (массива): if(!$_text="")

2) empty - проверка на НЕсуществование переменной (массива): if(empty($_text))

3) isset - проверка на существование переменной (массива): if(isset($text))

4) !empty - соответственно проверка на пустоту и НЕсуществование переменной (массива): if(!empty($text))

Так получается?

Link to comment
Share on other sites

  • 0

Очень странная вещь!

Создаю переменную

$id_row = $_GET['id'];

Заполняю таблицу:

INSERT INTO comments (author, text, article_id) values ('$name','$comment','$id_row')")

но айди сатьи не присваивается, если вместо $_GET['id'], написать 2(айди данной статьи), то всё выводится.

Хотя

echo $id_row;

Выводит айди статьи!!!! Что тут-то не так?!

Link to comment
Share on other sites

  • 0

1) `text`. Если имя поля совпадает с зарезервированным словом, оно должно быть в апострофах. А лучше всегда имена полей и таблиц заключать в апострофы

2) article_id имеет строковый тип? Странный подход. Советую попробовать убрать кавычки у $id_row

И ещё одно, не касательно темы воароса: $id_row=(int)$_GET['id']; Если идентификаторы числовые (обычно это так), то это защитит от sql-инъекций. Потому что в переменную попадёт ноль в случае передачи в $_GET строки. Останется добавить проверку на ноль и отсечь это значение как ошибочное.

Edited by Int
Link to comment
Share on other sites

  • 0

Тут про уникальность вроде нет ничего.

Отображение ошибок включено? mysql ни на что не ругается там?

И как это поле может быть пустым если оно not null? Полтергейст у вас тут.

Link to comment
Share on other sites

  • 0
И ещё одно, не касательно темы воароса: $id_row=(int)$_GET['id']; Если идентификаторы числовые (обычно это так), то это защитит от sql-инъекций. Потому что в переменную попадёт ноль в случае передачи в $_GET строки. Останется добавить проверку на ноль и отсечь это значение как ошибочное.

а в чем отличие $id_row=(int)$_GET['id'] от $id_row='".intval($_GET['id'])."' ?

Link to comment
Share on other sites

  • 0

Но в переменной-то хранится строка.

Разницы нет, intval() или (int), и то и то - приведение типов. Мне больше нравится запись (int), напоминает си :(

Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.

<?php

$foo = 10; // $foo is an integer

$bar = (boolean) $foo; // $bar is a boolean

?>

The casts allowed are:

* (int), (integer) - cast to integer

* (bool), (boolean) - cast to boolean

* (float), (double), (real) - cast to float

* (string) - cast to string

* (binary) - cast to binary string (PHP 6)

* (array) - cast to array

* (object) - cast to object

* (unset) - cast to NULL (PHP 5)

(binary) casting and b prefix forward support was added in PHP 5.2.1

Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:

<?php

$foo = (int) $bar;

$foo = ( int ) $bar;

?>

To explicitly convert a value to integer, use either the (int) or (integer) casts. However, in most cases the cast is not needed, since a value will be automatically converted if an operator, function or control structure requires an integer argument. A value can also be converted to integer with the intval() function.
Edited by Int
Link to comment
Share on other sites

  • 0

Товарищи,сейчас изучаю SQL,восник вопрос: что означает символы @@,перед ERROR = 0

Вот код

BEGIN TRANSACTION 
UPDATE accounts SET accsum = accsum - 150 WHERE accnumber = 2;
UPDATE accounts SET accsum = accsum + 150 WHERE accnumber = 1;
IF @@ERROR = 0
COMMIT
ELSE
ROLLBACK;

Link to comment
Share on other sites

  • 0

Товарищи,сейчас изучаю SQL,восник вопрос: что означает символы @@,перед ERROR = 0

Вот код

BEGIN TRANSACTION 
UPDATE accounts SET accsum = accsum - 150 WHERE accnumber = 2;
UPDATE accounts SET accsum = accsum + 150 WHERE accnumber = 1;
IF @@ERROR = 0
COMMIT
ELSE
ROLLBACK;

@@ - системная переменная

@ - пользовательская переменная

Если мне не изменяет память ...

Link to comment
Share on other sites

  • 0

Приветствую. Не стал создавать тему. В общем, я в замешательстве...

Необходимо загрузить список из csv в базу данных. Имеется интерфейс с формой, загружающей файл на сервер средствами php. Далее путь к файлу на хостинге передается как переменная query функции:


LOAD DATA INFILE `cards.csv` REPLACE
INTO TABLE `dis_card` character set utf8 fields terminated by ';' lines terminated by '\r\n'
IGNORE 1 (`number`, `owner`);

Однако мускуль ругается:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near '`cards.csv` REPLACE INTO TABLE `dis_card`
character set utf8 fields terminated b' at line 1

Версия сервера: 5.1.50-lk-log

Что не так то? Функция на сервере не поддерживается?

UPD: Функция отключена на сервере из-за угрозы безопасности.

Edited by Radiocity
Link to comment
Share on other sites

  • 0


LOAD DATA INFILE `cards.csv` REPLACE
INTO TABLE `dis_card` character set utf8 fields terminated by ';' lines terminated by '\r\n'
IGNORE 1 (`number`, `owner`);

UPD: Функция отключена на сервере из-за угрозы безопасности.

Ну и кавычки должны быть прямыми «'» , а не косыми «`»: LOAD DATA INFILE 'cards.csv'

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy