פונקציה כללית ל-mysql_prepare

שיווקי

New member
פונקציה כללית ל-mysql_prepare

שלום,

מקצת work arround כתבתי פונקציה (קוד מצו"ב) ל-prepare באופן דינאמי.


אני מנסה לקמפל את הקוד, אך הוא לא עובר phplint,
http://www.icosaedro.it/phplint/phplint-on-line.html

וגם יש בעיה מבחינת הקוד (לא עובד, והודעת שגיאה על השורה: call_user_func_array
mixing elements of different types in array: found string, expected mysqli_stmt
וכן,
calling `call_user_func_array()' declared in modules/standard:593, argument no. 2: found type `mixed[]', required type `mixed[int]'




1. איך להעביר את הקובץ קומפילצה ב-phplint?
2. מה לא נכון בקוד?
 

bnayal

New member
1. לא הבנתי למה אתה לוקח את ה phplint

כתורה.
2. הצורה שבה אתה מתעד כל שורה בקוד שלך קצת מקשה על הקריאה שלו.
3. מה אמורה לעשות הפונקציה הזאת בעצם? והאם שקלת להשתמש בORM כלשהו?
 

שיווקי

New member
פשוט.

אני צריך לקמפל את הקוד.
נוח לי שהקוד יהיה קשיח איתי, ביחוד שאין לי מישהו על הראש, ואין qa וכד' (כשיהיו משאבים - אז נחשוב על כך, וגם אם כן, אני לא מוותר על קשיחות קוד. מבחינתי זה best practice, שצריך להתמודד איתו. התמודדתי עם jslint בשיניים, אך בהצלחה, וכעת נותר ה-lint הנוסף. ככה זה קוד פתוח - בלי קומפיילר נורמלי. קצת @!? בלבן).

לא מכיר משהו אחר - פשוט גיגלתי, וכמדומני, גם ענו לי בפורום זה או אחר על ה-phplint, ואני מתעסק איתו זמן מה ...
ראיתי שהוא נפוץ בשאלותיו (ייתכן בגלל 2 המילים php ו-lint, אך הרמה של ה-phplint לעומת ה-jslint זה שמיים וארץ - לטובת ה-jslint. כך נראה בפשטות, גם העובדה שהוא לא משודרג לאחרונה. אך ייתכן ואני טועה).

קצת התקדמתי בהבנת הכלי phplint (שמתי במחשב, וקימפלתי מתוך המחשב. כמובן שזה שונה מ-online - כרגע שגיאה אחת, וזוהי השגיאה שהצגתי).
אני מתאר לעצמי, שההודעות קימפול הן סטנדרטיות (הקומפיילר לוקח בחשבון את ה-include-ים הקשורים).

לגבי הפונקציה - פונקציה כללית שמבצעת prepare. טוב לי שכך, כיוון שאם יש שגיאה וכד' - אני דואג להוציא הודעה מתאימה (ואולי אשכלל זאת בעתיד לכתיבה עם לוג - זו "קופסה שחורה" שאני משתמש בה.

לגבי ה-ORM - לא מכיר, סורי. בכל מקרה, אני מתעסק עם mysql ולא משהו אחר.
 

bnayal

New member
לפחות את המינימום לחפש מה זה ORM

היית משקיע. אלו סיפריות שעוזרות מאוד בכל הקשור לתקשורת עם מסדי הנתונים.
לפעמים להמציא את הגלגל מחדש זה מיותר לגמרי.
אם אתה לא משתמש ב FrameWorks שלמים אפשר לקחת מהם חלקים בכל זאת ובכל מקרה יש ORM עצמאיים (Doctrine למשל).

לגבי הלינט הזה, אני חייב לציין שזאת פעם ראשונה שאני רואה את זה. מלבד זה שהוא יודע לתת לך הערות על "איכות הקוד" (הוא לא יבדוק את האלגוריתמים שלך) לא רואה בו יותר מידי כלי מעניין, אם אני מפספס משהו תעדכן אותי.

בחזרה לקוד שלך,
1. למה אתה משתמש במשתנים גלובאלים? תעבוד עם מחלקות שיחזיקו לך את המידע שאתה צריך.
2. אתה משתמש בcall_user_func_array בשביל לעשות bind_param ? מה זה נותן? קרא קצת על mysqli prepare ותארה את הדוגמאות. בכל מקרה אחד הפרמטרים שאתה מעביר שם מגיע לא כמו שהוא מצפה לקבל (קרא את השגיאה).
http://www.php.net/manual/en/mysqli.prepare.php

בהצלחה,
בניה
 

שיווקי

New member
או קיי.

לגבי call_user_func_array, הפרמטר השני שגוי.
(לא $array_of_params)

אם אני רושם בפרמטר השני במקום :

array("i", 1);

אז הכל תקין.

(מקודם ה-phplint החזיר הודעה אחרת מאשר השרת. השרת מחזיר הפעם.
bind_param() expected to be a reference).

אז מה ההבדל בין לשלוח $array_of_params לבין לשלוח

array("i", 1);
 
למעלה