Kata Pengantar
Syarikat ingin melibatkan diri dalam pembangunan setempat, dan pangkalan data ialah pangkalan data Dameng Versi Dameng ialah dm8, dan versi php ialah 7.2 . Peringkat awal dijalankan pada Windows Dibangunkan .
Pangkalan data dipindahkan dari pangkalan data mysql ke Dameng Saya tidak akan pergi ke kaedah migrasi dan kaedah pemasangan sambungan PHP. Terdapat banyak maklumat di Internet dalam hal ini.
Walau bagaimanapun, terdapat sedikit maklumat tentang cara menggunakan PHP untuk menyambung ke pangkalan data Dameng Semua maklumat bergantung pada membaca dokumen yang saya ada melangkah dan kaedah Ia adalah untuk mengendalikan pangkalan data secara langsung, dan kemudian anda boleh merangkumnya mengikut pilihan anda sendiri.
Izinkan saya menerangkan secara ringkas direktori maklumat Dameng "Dokumen" di bawah direktori pemasangan Dameng terutamanya mengandungi pelbagai dokumen penggunaan yang mengandungi sambungan untuk pelbagai bahasa, jadi sambungan PHP diambil dari sini, I gunakan sambungan php_dm. Terdapat terlalu sedikit maklumat tentang pdo_dm, jadi saya tidak membuat banyak kajian.
Terdapat dua perkara yang perlu diingatkan semasa membuat instantiate pangkalan data Set aksara dan kepekaan huruf besar-besaran mesti diingat terlebih dahulu.
Pengalaman saya ialah nama jadual data dan nama medan yang dipindahkan daripada MySQL semuanya adalah huruf kecil, yang mengakibatkan pelbagai perangkap apabila digunakan kemudiannya, saya mendapati bahawa kepekaan kes boleh dialih keluar. Di sini kami akan menggunakan jadual CITY dalam perpustakaan sampel rasmi untuk menunjukkan pelbagai kaedah penggunaan php7.2. PertanyaanTanpa melengahkan masa lagi, mari kita mulakan dengan kod
//连接数据库 $link = dm_connect("localhost", "SYSDBA", "SYSDBA"); if(!$link){ var_dump(@dm_error()); var_dump(iconv("GBK","UTF-8",@dm_errormsg())); } dm_setoption($link,1,12345,1);//设置 dm 连接和语句的相关属性,设置UTF8 $query = "select * from DMHR.CITY"; $result = dm_exec($link,$query); print " 查询结果:"; while ($line = dm_fetch_array($result)){ print_r($line); echo '<br>'; } /* 释放资源 */ dm_free_result($result); /* 断开连接 */ dm_close($link);
Kaedah penggunaan sambungan php rasmi Dameng php5 dan php7 adalah sangat berbeza ialah Ia untuk php5, dan ia tidak boleh digunakan sepenuhnya dalam php7. Masalah aksara Cina yang bercelaru dalam pernyataan pertanyaan adalah lubang benam Saya mencuba kaedah ini selepas menyemak dokumentasi untuk masa yang lama Jika ada kaedah lain yang lebih elegan, sila ajar saya, dan semua orang boleh belajar daripadanya antara satu sama lain.
Sisipkan
//连接数据库 $link = dm_connect("localhost", "SYSDBA", "SYSDBA"); if(!$link){ var_dump(@dm_error()); var_dump(iconv("GBK","UTF-8",@dm_errormsg())); } dm_setoption($link,1,12345,1);//设置 dm 连接和语句的相关属性,设置UTF8 $query = "INSERT INTO DMHR.CITY (CITY_ID,CITY_NAME,REGION_ID) VALUES ('JL','吉林','1')"; $result = dm_exec($link,$query); if($result){ echo "插入成功"; //曲线查询插入id /*$query = "SELECT @@IDENTITY as insert_id"; $result = dm_exec($link,$query); $line = dm_fetch_array($result); echo ',ID:'; print_r($line);*/ } /* 释放资源 */ dm_free_result($result); /* 断开连接 */ dm_close($link);
dan hanya boleh disoal melalui lengkung Nilai id yang meningkat sendiri Sudah tentu, jadual dalam demonstrasi tidak mempunyai ID peningkatan automatik Pada masa yang sama, SELECT @@IDENTITY sebagai insert_id mesti berjaya disoal ID peningkatan sendiri bagi sisipan yang berjaya sebelumnya akan dikembalikan Jangan sekali-kali menggunakan ID kenaikan automatik untuk menentukan sama ada penyata berjaya dimasukkan . Kemas kini
Kemas kini sangat mudah
//连接数据库 $link = dm_connect("localhost", "SYSDBA", "SYSDBA"); if(!$link){ var_dump(@dm_error()); var_dump(iconv("GBK","UTF-8",@dm_errormsg())); } dm_setoption($link,1,12345,1);//设置 dm 连接和语句的相关属性,设置UTF8 $query = "UPDATE DMHR.CITY SET REGION_ID='2' WHERE CITY_ID='JL'"; $result = dm_exec($link,$query); if($result){ echo "更新成功"; } /* 释放资源 */ dm_free_result($result); /* 断开连接 */ dm_close($link);
Padam
Pemadaman juga sangat mudah, tiada yang istimewa Perkara yang perlu diberi perhatian
//连接数据库 $link = dm_connect("localhost", "SYSDBA", "SYSDBA"); if(!$link){ var_dump(@dm_error()); var_dump(iconv("GBK","UTF-8",@dm_errormsg())); } dm_setoption($link,1,12345,1);//设置 dm 连接和语句的相关属性,设置UTF8 $query = "DELETE FROM DMHR.CITY WHERE (CITY_ID='JL')"; $result = dm_exec($link,$query); if($result){ echo "删除成功"; } /* 释放资源 */ dm_free_result($result); /* 断开连接 */ dm_close($link);
Transaksi
Menurut dokumentasi rasmi: "DM tidak menyediakan pernyataan eksplisit yang mentakrifkan permulaan transaksi, pernyataan SQL boleh laku pertama (kecuali log masuk pernyataan) "Permulaan transaksi secara tersirat", inilah sebab mengapa tiada kaedah permulaan transaksi yang ditentukan Walau bagaimanapun, apabila kita ingin memulakan transaksi daripada program tertentu, kita boleh menggunakan fungsi dm_autocommit() untuk mematikan penyerahan automatik. daripada urus niaga. Selepas program tamat, ia akan secara automatik Serah dan membukaPerangkap
//连接数据库 $link = dm_connect("localhost", "SYSDBA", "SYSDBA"); if(!$link){ var_dump(@dm_error()); var_dump(iconv("GBK","UTF-8",@dm_errormsg())); } dm_setoption($link,1,12345,1);//设置 dm 连接和语句的相关属性,设置UTF8 $query = "INSERT INTO DMHR.CITY (CITY_ID,CITY_NAME,REGION_ID) VALUES ('JL','吉林','1')"; $result = dm_exec($link,$query); if($result){ echo "插入成功。"; } $result = dm_autocommit($link,false);//事务自动提交关闭 $query = "UPDATE DMHR.CITY SET CITY_NAME='辽宁' WHERE (CITY_ID='SY')"; $result = dm_exec($link,$query); if($result){ echo "更新成功,回滚。"; } dm_rollback($link);//回滚 //dm_commit($link);//提交 $result = dm_autocommit($link,true);//开启事务自动提交,结束事务 /* 断开连接 */ dm_close($link);
select DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE());
2 . Jika pangkalan data yang digunakan sebelum ini adalah mysql, sila perhatikan skala di belakang dua jenis format masa DATETIME dan TIMESTAMP Jika bukan 0, ketepatan masa akan lebih panjang
3. Beberapa Apabila medan ditanya, ia akan menjadi huruf besar, seperti "kira"
Penyelesaian: Gunakan petikan berganda untuk memetik medan . Contoh:
四、group by语句的使用很严格(或者说mysql的group by过于放松),select中除聚合函数之外出现的所有字段必须要在group by里面。
比方举一个错误的例子:
select EMPLOYEE_NAME,JOB_ID from "DMHR"."EMPLOYEE" group by JOB_ID;
EMPLOYEE_NAME和字段没在group by 中,执行必定失败
提供一种解决思路:
select * from "DMHR"."EMPLOYEE" where EMPLOYEE_ID in (select min(EMPLOYEE_ID) as minid from "DMHR"."EMPLOYEE" group by JOB_ID)
同样select中如果有聚合函数之外的字段,需要加入group by。错误的例子:
select min(EMPLOYEE_ID),EMPLOYEE_NAME,JOB_ID from "DMHR"."EMPLOYEE";
select中有min()函数外还有其他字段,执行必定失败。
如果一定要在其他很多字段里面加入聚合函数,提供一种思路:
select t1.EMPLOYEE_NAME,t1.JOB_ID,t2.minid from "DMHR"."EMPLOYEE" t1 left join ( select min(EMPLOYEE_ID) as minid,JOB_ID from "DMHR"."EMPLOYEE" group by JOB_ID ) t2 on t2.JOB_ID=t1.JOB_ID where t1.EMPLOYEE_ID in (select min(EMPLOYEE_ID) as minid from "DMHR"."EMPLOYEE" group by JOB_ID);
结语
目前踩过的坑就这些了,希望能够帮助到大家。
对于其他问题还是要多翻阅官方文档了。