[英]Inserting new name in field mysql with temporary table
我正在應用程序中創建重復功能,這將使用以下代碼復制整個空缺,在示例中,我從空缺ID 94(具有橫幅名稱“ image.jpg”)進行復制:
$vacdata = $this->vacancies_model->get($data['old_vacancy_id']);
$newvacbannername = return_unique_filename($vacdata->banner);
copy_file($vacdata->banner, $newvacbannername);
$data['newvacancyid'] = $this->vacancies_model->duplicate($data['old_vacancy_id'], $newvacbannername);
$ newvacbannername中有字符串“ image_8.jpg”。 這是我復制的新文件名的唯一名稱,該副本正在按預期工作。
函數重復看起來像這樣:
function duplicate($vacid, $banner)
{
$this->db->query('CREATE TEMPORARY TABLE tmptable SELECT * FROM vacancies WHERE vacancy_id = ' . $vacid);
$this->db->query('UPDATE tmptable SET vacancy_id = NULL');
$this->db->query('UPDATE tmptable SET banner = ' . $banner );
$this->db->query('UPDATE tmptable SET create_time = now()');
$this->db->query('UPDATE tmptable SET watch_counter = 0');
$this->db->query('UPDATE tmptable SET contact_info_counter = 0');
$this->db->query('UPDATE tmptable SET status = 0');
$this->db->query('UPDATE tmptable SET reminder_mail_sent = 0');
$this->db->query('UPDATE tmptable SET extend_code = NULL');
$this->db->query('INSERT INTO vacancies SELECT * FROM tmptable');
$newvacancyid = $this->db->insert_id();
$this->db->query('DROP TEMPORARY TABLE IF EXISTS tmptable');
return $newvacancyid;
}
我嘗試在$ banner上執行var_dump,以確保此變量包含正確的字符串,並且確實包含image_8.jpg。 因此,它只是從原始空缺中復制橫幅,但未設置新的橫幅名稱
如果我查看執行的SQL,會看到以下結果:
0.0076 CREATE TEMPORARY TABLE TMPTABLE SELECT * FROM職位空缺vacancy_id = 94
0.0090更新tmptable SET vacancy_id = NULL
0.0000更新tmptable設置標題= image_8.jpg
0.0005 UPDATE tmptable SET create_time = now()
0.0023 UPDATE tmptable SET watch_counter = 0
0.0001 UPDATE tmptable SET contact_info_counter = 0
0.0002 UPDATE tmptable SET狀態= 0
0.0002 UPDATE tmptable SET hinter_mail_sent = 0
0.0002 UPDATE tmptable SET擴展代碼= NULL
0.0153將空位插入SELECT * FROM tmptable
但是,如果我在mysql本身中查找重復的新空缺,則它在update語句中插入所有內容的行都可以使用,但$ banner除外,它插入的名稱與原始空缺完全相同(在此示例中為image.jpg,而不是image_8 .jpg)。
為什么不做:
INSERT INTO vacancies
SELECT
NULL, --id field
other_columns,
go_here,
NULL,
:banner, --bind this from $banner,
now(),
0,
0,
0,
0,
NULL
FROM vacancies
WHERE vacancy_id = ' . $vacid
當您可以簡單地在一個臨時表中執行此操作時,似乎需要一個臨時表和大量查詢。 另外:研究將變量綁定到查詢:這是更安全的方法,也是推薦的方法。
另外,您也可以通過事務來執行此操作:
START TRANSACTION;
INSERT INTO vacancies
SELECT
*
FROM vacancies
WHERE vacancy_id = :vacid;
UPDATE vacancies
SET banner = :banner,
create_time = now(),
watch_counter = 0,
...
WHERE vacancy_id = :vacid --Get the inserted ID from mysql_insert_id();
COMMIT;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.