Вы должны иметь правильную иерархию. Во-первых, нет, у вас не может быть
#include <Cryptor/MD5Encryptor.h>
с вашими текущими настройками, не во время сборки библиотеки и не без выравнивания иерархии при установке ваших файлов (что может делать CMake).
То, что вы можете сделать, это:
#include <Cryptor/core/abstract/MD5Encryptor.h>
, если вы добавите свой проект в папку Cryptor
вместо того, чтобы находиться в корне вашего проекта. Я бы посоветовал вам создать файл Cryptor.cmake
, который позволил бы людям забирать вашу библиотеку после установки, чтобы им не нужно было знать, где находится библиотека или как называется библиотека.
Вот ответ, предложенный Александром:
, когда вы используете id = LAST_INSERT_ID (id), он устанавливает значение mysql_insert_id = обновленный идентификатор, поэтому ваш окончательный код должен выглядеть следующим образом:
<?
$query = mysql_query("
INSERT INTO table (column1, column2, column3)
VALUES (value1, value2, value3)
ON DUPLICATE KEY UPDATE
column1 = value1,
column2 = value2,
column3 = value3,
id=LAST_INSERT_ID(id)
");
$my_id = mysql_insert_id();
Это вернет правильное значение $ my_id независимо от обновления или вставки.
Хотя и не используются mysql_insert_id () и ON DUPLICATE KEY UPDATE, альтернативный отличный способ получить значение любого поля при обновлении другого найденного здесь :
UPDATE table SET id=(@tempid:=id) , .... LIMIT 1;
SELECT @tempid;
Я использовал его, имея таблица с (id, status) 'id' автоинкрементом первичного индекса, а 'status' была полем, на котором было выполнено обновление, но мне нужно было получить 'id' обновленной строки. Это решение также подтверждает условия гонки как mysql_insert_id ().
Вы можете проверить, был ли запрос вставкой или обновлением (mysql_affected_rows (); возвращает 1 при вставке и 2 при обновлении).
Если это была вставка, используйте mysql_insert_id, если это было обновление, вам понадобится другой запрос.
<?php
$query ="INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE SET column1=value1, column2=value2, column3=value3";
mysql_query($query);
if(mysql_affected_rows() == 1) { $id = mysql_insert_id(); }
else { // select ...
}
?>
Я знаю, что это не совсем то, что вы ищете, но это лучшее, что я мог придумать