Mariastan เป็นเครื่องมือวิเคราะห์แบบคงที่สำหรับการสืบค้น Mariadb วัตถุประสงค์หลักของมันคือการทำหน้าที่เป็นพื้นฐานสำหรับการขยาย phpstan
สถานะปัจจุบัน (24. 04. 2024):
มาเรียไม่สมบูรณ์มาก มันอาจครอบคลุม ~ 90% ของกรณีการใช้งานในฐานรหัสขนาดใหญ่ที่ฉันใช้มัน (หลายร้อยตาราง, การสืบค้นหลายพัน) เป็นผลให้มีกิจกรรมไม่มาก แต่มันได้รับการดูแลอย่างแข็งขันในแง่ที่ว่าถ้ามีอะไรบางอย่างหยุดพักสำหรับฉันมันอาจจะได้รับการแก้ไข
หากคุณพยายามใช้มันในโครงการของคุณคุณมีแนวโน้มที่จะใช้กรณีการใช้งานที่ไม่ได้ใช้งาน (เช่นไวยากรณ์/ฟังก์ชั่นที่โครงการของฉันไม่ได้ใช้) หากสิ่งนั้นเกิดขึ้นคุณควรเตรียมพร้อมที่จะแก้ไขสิ่งต่าง ๆ ด้วยตัวคุณเอง (สิ่งส่วนใหญ่ควรง่าย)
ไม่มีสัญญาที่เข้ากันได้กับสิ่งใดก็ได้และไม่มีการเผยแพร่ - ฉันแค่ใช้ Master
Mariastan ได้รับการทดสอบกับ Mariadb 10.11 และ Php 8.1-8.3
ติดตั้ง Mariastan โดยใช้ composer require --dev schlndh/maria-stan:dev-master จากนั้นคุณจะต้องเพิ่มสิ่งต่อไปนี้ใน phpstan.neon ของคุณ:
includes :
- ./vendor/schlndh/maria-stan/extension.neon
Mariastan ต้องการเข้าถึงสคีมาฐานข้อมูล วิธีที่ง่ายที่สุดในการให้มันคือการให้มันเชื่อมต่อโดยตรงกับฐานข้อมูล คุณจะต้องเพิ่มการกำหนดค่าต่อไปนี้ใน phpstan.neon ของคุณและตั้งค่าข้อมูลรับรองที่เหมาะสม:
parameters :
maria-stan :
db :
# Change these to match your database
host : 127.0.0.1
port : 3306
user : ' root '
password : ' '
database : ' db 'Mariastan ต้องการการเข้าถึงฐานข้อมูลเพื่อดึงสคีมาสำหรับการวิเคราะห์แบบสอบถาม มันอ่านสคีมาตารางเท่านั้นและไม่ได้เขียนอะไรเลย อย่างไรก็ตาม อย่า ให้การเข้าถึงฐานข้อมูลใด ๆ ที่มีข้อมูลสำคัญใด ๆ
อีกวิธีหนึ่งก็เป็นไปได้ที่จะใช้ Mariastan โดยไม่ต้องเข้าถึงฐานข้อมูลในระหว่างการวิเคราะห์ ในกรณีนี้คุณจะต้องทิ้งสคีมาก่อนโดยใช้ MariaDbFileDbReflection::dumpSchema และบันทึกลงในไฟล์ นี่คือตัวอย่างสคริปต์ที่ทำเช่นนั้น:
<?php
declare (strict_types= 1 );
use MariaStan DbReflection MariaDbFileDbReflection ;
require_once __DIR__ . ' /vendor/autoload.php ' ;
$ mysqli = new mysqli ( ' 127.0.0.1 ' , ' root ' , '' );
file_put_contents ( __DIR__ . ' /maria-stan-schema.dump ' , MariaDbFileDbReflection:: dumpSchema ( $ mysqli , ' database ' )); จากนั้นเพิ่มสิ่งต่อไปนี้ใน phpstan.neon ของคุณ:
parameters :
maria-stan :
reflection :
file : %rootDir%/../../../maria-stan-schema.dump
services :
mariaDbReflection : @ mariaDbFileDbReflectionโปรดทราบว่าการขยายตัวโดยอัตโนมัติของเส้นทางสัมพัทธ์จะทำงานได้เฉพาะกับการกำหนดค่าของ PHPSTAN (เช่นเป็นรายการ hardcoded ของปุ่มกำหนดค่า) ดังนั้นคุณจะต้องจัดเตรียมเส้นทางที่แน่นอนไปยังไฟล์ Dump
ดู extension.neon สำหรับรายการพารามิเตอร์ที่สมบูรณ์
Mariastan รวมถึงตัวอย่าง phpstan ตัวอย่างสำหรับ mysqli อย่างไรก็ตามวัตถุประสงค์ของส่วนขยายนี้เป็นเพียงการตรวจสอบการรวมเข้ากับ phpstan ฉันไม่คาดหวังว่าใครจะใช้ mysqli โดยตรง ดังนั้นคุณคาดว่าจะเขียนส่วนขยาย phpstan ของคุณเองที่รวมเข้ากับ Mariastan หากคุณต้องการใช้ส่วนขยาย mysqli รวมถึง ./vendor/schlndh/maria-stan/extension.mysqli.neon ใน phpstan.neon ของคุณ
คุณสามารถใช้ส่วนขยาย MySQLI เป็นจุดเริ่มต้นที่แก้ไขเพื่อให้ตรงกับความต้องการของคุณ แนวคิดพื้นฐานคือการรับสตริงแบบสอบถามจาก phpstan ส่งผ่านไปยัง Mariastan เพื่อทำการวิเคราะห์จากนั้นรายงานประเภทผลลัพธ์และข้อผิดพลาดกลับไปที่ PHPSTAN
ก่อนที่คุณจะเริ่มใช้ส่วนขยายของคุณเองเพื่อรวม Mariastan เข้ากับโครงการของคุณคุณสามารถลองใช้งานได้อย่างรวดเร็ว คุณสามารถเริ่มต้นด้วยการตรวจสอบตัวอย่างง่ายๆซึ่งใช้ส่วนขยาย MySQLI จากนั้นคุณสามารถลองโทรค้นหาจาก codebase ของคุณผ่าน MySQLI และวิเคราะห์ด้วยส่วนขยาย MySQLI เพื่อให้แน่ใจว่า Mariastan รองรับคุณสมบัติที่โครงการของคุณใช้
นี่คือรายการของคุณสมบัติที่คุณสามารถนำไปใช้ในส่วนขยาย phpstan ของคุณเองตาม Mariastan (ส่วนใหญ่ควรแสดงในส่วนขยาย MySQLI):
mysqli_result::fetch_fields ) นี่เป็นเพราะ Mariastan สามารถ (ในกรณีง่ายๆ) เข้าใจการสืบค้นเช่น SELECT col FROM tbl WHERE col IS NOT NULL และลบ NULL ออกจากประเภทผลลัพธ์ในขณะที่ Mariadb ดูเหมือนจะไม่ทำเช่นนั้นINSERT / REPLACESELECT COUNT(*) FROM tbl non-empty-array ซึ่งสามารถใช้เพื่อแคบลงประเภทการส่งคืนของวิธีการเช่น mysqli_result::fetch_all function foo ( mysqli $ db , int $ count ) {
return $ db -> prepare ( " SELECT * FROM tbl WHERE id IN ( " . implode ( ' , ' , array_fill ( 0 , $ count , ' ? ' )) . ' ) ' );
}เท่าที่ฉันสามารถบอกได้ PHPSTAN-DBA ทำงานโดยดำเนินการค้นหาเพื่อรับข้อมูลเกี่ยวกับประเภทผลลัพธ์ข้อผิดพลาด ... Mariastan ในอีกทางหนึ่งวิเคราะห์การสืบค้นแบบคงที่ ประโยชน์ของ PHPSTAN-DBA รวมถึง:
มีข้อเสียเล็กน้อยเกี่ยวกับวิธีการของ PHPSTAN-DBA:
information_schema ไม่จำเป็นต้องใช้เวลาวิเคราะห์) แต่เป็นไปได้ที่จะใช้ CREATE TABLE (ฯลฯ ) การแยกวิเคราะห์และใช้การสะท้อน dB ที่ด้านบนของสิ่งนั้นSELECT แบบสอบถามในหลาย ๆ ที่รวมถึงการใช้ธุรกรรม ดังนั้นฉันไม่แน่ใจว่ามันรองรับ INSERT ได้ดีเพียงใด (มีบางอย่างในการทดสอบอย่างน้อย)