Intereting Posts
Как загрузить пользовательские файлы конфигурации с помощью codeigniter? Показать bbcode на html странице с помощью php codeigniter mysql left join include select Избегайте перезагрузки страницы при отправке формы с помощью ajax с laravel Javascript выводится из отдельного скрипта php Проверка даты и времени Laravel 5.1 позволяет использовать два формата Предупреждение: mysqli_connect (): (HY000 / 1045): доступ запрещен для имени пользователя '@' localhost '(с использованием пароля: YES) добавьте класс в определенную строку в codeigniter, используя класс таблицы Не удалось создать COM-объект «X»: класс, не зарегистрированный в другой WAMP Почему в этом коде не работает тег линии html br break? Как создать многоязычный контент Pdf в PHP Правила перезаписи правил CodeIgniter и контроллер Примечание. Определена неопределенная переменная: шаблон, но $ template. php sprintf () с иностранными символами? Не удалось найти оболочку «https» – вы забыли включить ее при настройке PHP?

PHP MySQL Triggers – как передать переменные для запуска?

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

//Inserts into the table the username and password $sql = "INSERT INTO table VALUES ($_POST['username'], $_SESSION['password']); 

Триггерные DDL-отчеты

 DELIMITER $$ //Creates trigger to insert into table1 ( logs ) the userid and patientid ( which has to come from php ) USE `baemer_emr`$$ CREATE DEFINER=`baemer_emr`@`localhost` TRIGGER `table1`.`after_insert` AFTER INSERT ON `baemer_emr`.`table1` FOR EACH ROW BEGIN INSERT INTO table2 VALUES (NEW.idn, $_POST[userid], $_SESSION[patientid]); END$$ 

Это возможно?

Исправьте, что SQL-инъекция

 $username = mysql_real_escape_string($_POST['username']); $password = mysql_real_escape_string($_POST['password']); $sql = "INSERT INTO table1 VALUES ('username','password'); // You must quote your $vars ^ ^ ^ ^ like this // or syntax errors will occur and the escaping will not work!. 

Обратите внимание, что хранение незашифрованных паролей в базе данных является кардинальным грехом.
См. Ниже, как это исправить.

Триггеры не позволяют параметры
Вы можете получить доступ только к значениям, которые вы только что вставили в таблицу.
Триггер Insert имеет для этого фиктивную таблицу.
У триггера Delete есть old фиктивная таблица, чтобы увидеть значения, которые нужно удалить.
Триггер обновления имеет как old и new .

Кроме этого вы не можете получить доступ к каким-либо внешним данным.

 DELIMITER $$ //Creates trigger to insert into table1 ( logs ) the userid and patientid ( which has to come from php ) CREATE TRIGGER ai_table1_each AFTER INSERT ON `baemer_emr`.`table1` FOR EACH ROW BEGIN INSERT INTO table2 VALUES (NEW.idn, NEW.username, NEW.patientid); END$$ 

Решение
Создайте таблицу черных дыр.
Таблицы Blackhole не хранят ничего, их единственная причина существования – для целей репликации, и поэтому вы можете прикреплять к ним триггеры.

 CREATE TABLE bh_newusers ( username varchar(255) not null, password varchar(255) not null, idn integer not null, patient_id integer not null, user_id integer not null) ENGINE = BLACKHOLE; 

Затем вставьте данные в таблицу черных дыр и обработайте это с помощью триггера.

 CREATE TRIGGER ai_bh_newuser_each AFTER INSERT ON `baemer_emr`.bh_newuser FOR EACH ROW BEGIN DECLARE newsalt INTEGER; SET newsalt = FLOOR(RAND()*999999); INSERT INTO users (username, salt, passhash) VALUES (NEW.username, newsalt, SHA2(CONCAT(newsalt, password), 512)); INSERT INTO table2 VALUES (NEW.idn, NEW.username, NEW.patient_id); END$$ 

Примечания к триггеру
Вы никогда не должны хранить пароли в ящике в базе данных.
Всегда храните их как соленый хэш, используя самую безопасную хеш-функцию (в настоящее время SHA2 с длиной ключа 512) , как показано в триггере.
Вы можете проверить, есть ли у кого-то правильный пароль:

 SELECT * FROM user WHERE username = '$username' AND passhash = SHA2(CONCAT(salt,'$password'),512) 

связи
http://dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html
http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
Хранение хэшированных паролей в MySQL
Как работает SQL-инъекция из комикса XBCD Bobby Tables?

Я не думаю, что это так.

Вы можете добавить столбцы userid и patientid в таблицу VALUES , заполнить их во время исходной вставки и затем связать их с триггером при вставке в таблицу журналов.

 alter table `baemer_emr`.`table1` add userId varchar(100); alter table `baemer_emr`.`table1` add patientId int unsigned; 

а затем триггер:

 DELIMITER $$ //Creates trigger to insert into table1 ( logs ) USE `baemer_emr`$$ CREATE DEFINER=`baemer_emr`@`localhost` TRIGGER `table1`.`after_insert` AFTER INSERT ON `baemer_emr`.`table1` FOR EACH ROW BEGIN INSERT INTO table2 VALUES (NEW.idn, NEW.userId, NEW.patientId); END$$ DELIMITER ;