PHP PDO MYSQL - Easiest way to compare array to query and return an array with results not in result of query? -


PHP में मुझे $ allFiles जैसा एक सामान्य सरणी है:

  अर्रे ([0] = & gt; test1.csv [1] = & gt; test2.csv [2] = & gt; test3.csv)   

MySQL में मेरे पास एक टेबल है उसमें मूल्य हैं:

  | आईडी | प्रोसीसेड | | 0 | Test2.csv |  $ allFiles  को तालिका में तुलना करने के लिए और एक नया सरणी  $ newFiles    

तुलना करने के लिए सबसे आसान तरीका (PDO को कनेक्शन विधि के रूप में प्रयोग करना) क्या है? कोड> उसमें:

  अर्रे ([0] = & gt; test1.csv [1] = & gt; test3.csv)   

(ये हैं जो फाइलें MySQL में तालिका में प्रदर्शित नहीं की जाती हैं)

मैं मैनुअल के माध्यम से किया गया है, लेकिन ऐसा कुछ भी नहीं मिल सकता है, जो वास्तव में इससे संबंधित होगा, शायद मुझे कुछ याद हो सकता है कोई इनपुट बहुत सराहना की जाएगी, धन्यवाद!

ऐसा करने के लिए कोई तैयार फ़ंक्शन नहीं है। ज्यादातर समय, आपको पता चल जाएगा कि आपकी समस्या का कोई आउट-ऑफ-बॉक्स समाधान नहीं है। आपको अपना कोड लिखना पड़ेगा, जो कि बहुत मुश्किल नहीं है: डीबी को सभी फाइल नाम मिलते हैं, परिणामों के साथ एक सरणी बनाते हैं, फिर अपने पास की सरणी और क्वेरी परिणाम के बीच अंतर प्राप्त करें। एक बुनियादी उदाहरण होगा:

  $ stmt = $ pdo- & gt; तैयार करें ('चुनें प्रक्रिया से db.table जहां में प्रयुक्त (?,?,?)'); $ Stmt- & gt; पर अमल ($ allFiles); $ मौजूदा = सरणी (); जबकि $ $ = $ stmt- & gt; प्राप्त करें (पीडीओ :: FETCH_OBJ)) $ मौजूदा $] = $ पंक्ति- & gt; PROCESSED; // मौजूदा ऑरेट्स वाले एक्सट्रैक्ट ऑब्जेक्ट्स $ notFound = array_diff ($ सभी फाइलें, $ मौजूदा); var_dump ($ notFound);   

आप $ allFiles सरणी की लंबाई का उपयोग करते हुए और जोड़ सकते हैं प्लेसहोल्डर्स तदनुसार क्वेरी को अधिक गतिशील बना सकते हैं : <पूर्व> $ allFiles = array_filter (array_unique ($ allFiles)); // साफ सरणी $ प्लेसहोल्डर = array_fill (0, गणना ($ allfiles), '?'); $ stmt = $ pdo- & gt; तैयार ('चयन प्रक्रिया से db.table जहां से प्रक्षेपित किया गया है (' .implode (',', $ placeholders)। ')'); // विकल्प: $ stmt = $ pdo- & gt; तैयार करें ('चयन प्रक्रिया से db.table जहां से प्रक्षेपित किया गया है ('। Substr (str_repeat ('?,', Count ($ allfiles)), // repeat?, के रूप में कई बार के रूप में मान 0, -1 / trailing ", trailing", ")। ')');); $ stmt- & gt; निष्पादित करें (array_values ​​($ allFiles)); // अधिक से अधिक सुरक्षित है माफ करना // बाकी के समान है

इससे पहले कि आप सरणी की किसी भी लम्बाई को संसाधित करने की अनुमति देता है। / P>

Comments

Post a Comment

Popular posts from this blog

php - PDO bindParam() fatal error -

logging - How can I log both the Request.InputStream and Response.OutputStream traffic in my ASP.NET MVC3 Application for specific Actions? -

java - Why my included JSP file won't get processed correctly? -