FORUM
FORUM
Forumindex / Webbutveckling & programmering / Migrera MySQL -> MySQLi
2017-03-14 08:23#1

k0nan
Ingen klan

BrutalCS Poet
2206

Tjenare,
Jag håller på att migrera vissa sidor från MySQL till MySQLi och har stött på en del tidskrävande repeditionsarbeten.

Den större delen av migreringen kan göras enkelt med Find/Replace genom att t.ex köra:
replace: mysql(
med: mysqli($con,

Men det är knepigare när det kommer till alla funktioner.
T.ex, hur gör jag enklast för att få till en sådan sak:
nuvarande: getaccess($user)
ska bli: getaccess($user, $con)

Jag är medveten om att man kan använda regex i find/replace men jag lyckas inte få till en bra form av regex, ingen som är bulletproof för att inte förstöra min kod. Tanken är att jag ska göra detta för över 400 dokument samtidigt så därför behöver jag en så säker regex kod som möjligt. Eller har någon ett annat bra förslag?

-------------------------------------------
Update 14/3 10:00:
Följande regex tycker jag borde fungera.. Men groupingen verkar inte fungera. $1 blir inget värde alls :cry:

Find: getaccess\(([^\(\)])+\)
Replace: getaccess($con, $1)

-------------------------------------------
Update: 14/3 17:03:
Jag hittade en find pattern som fungerade:

getaccess[\(]+([a-zA-Z\$\[\]\'\'\"\"]+)[\)]

Senast redigerad 2017-03-14 16:03
6 kommentarer, visar 1-6 - Första « [1] » Sista
2017-03-14 10:34#2

Zoth
Ingen klan

BrutalCS Uberlegend
1703

Har tyvärr inga förslag till hur du ska lösa det med hjälp av regex för tillfället...

Men efter en snabb googling så verkar folk rekommendera det här verktyget för att göra det du vill! :)

Har inte testat det, så har inga garantier på att det fungerar. Fungerar det, så sparar det ju dig en hel del huvudvärk! :D
2017-03-14 12:38#3

k0nan
Ingen klan

BrutalCS Poet
2206


Citat av Zoth

Har tyvärr inga förslag till hur du ska lösa det med hjälp av regex för tillfället...

Men efter en snabb googling så verkar folk rekommendera det här verktyget för att göra det du vill! :)

Har inte testat det, så har inga garantier på att det fungerar. Fungerar det, så sparar det ju dig en hel del huvudvärk! :D


Frågan är ju om denna verkligen rättar funktioner, eller bara queries och omvandlar de vanliga mysql-funktionerna. Det enda som kvarstår i mitt arbete är somsagt att rätta så att min anslutning läggs till när jag kallar på funktioner, helst utan att göra någon ful-lösning med globala värden osv.
Som jag förstod detta så skulle man avinstallera mysql extensionen och sedan skapar detta en egen funktion som heter mysql() och översätter anslutningen till mysqli i själva funktionen, om så är fallet lär det inte hjälpa mina egna funktioner tyvärr.
2017-03-14 15:19#4

Evilkenevil
Ingen klan

BrutalCS Uberlegend
2089

Känns som att du borde vända dig till forum inriktad mot detta :Pd!

400 PHP dokument som använder den föråldrade mySQL? Känns som det är bättre att skriva om funktionerna och göra det rätt. Funktioner för databasen borde ligga på ett centralt ställe och hämtas när den behövs, och smart kodat innebär det att du bara behöver ändra på ett ställe för att uppdatera det överallt

Var länge sedan jag körde PHP; men försök effektivisera hur du skriver funktionerna istället.
2017-03-14 15:47#5

k0nan
Ingen klan

BrutalCS Poet
2206

Citat av Evilkenevil

Känns som att du borde vända dig till forum inriktad mot detta :Pd!

400 PHP dokument som använder den föråldrade mySQL? Känns som det är bättre att skriva om funktionerna och göra det rätt. Funktioner för databasen borde ligga på ett centralt ställe och hämtas när den behövs, och smart kodat innebär det att du bara behöver ändra på ett ställe för att uppdatera det överallt

Var länge sedan jag körde PHP; men försök effektivisera hur du skriver funktionerna istället.


Det är ju effektiviserat. Funktionerna finns på ett specifikt ställe och kallas på lite överallt i dessa 400 dokument. Men det är när man kallar på en funktion som man måste passa med anslutningen med MySQLi.

................

Update: Hittade en pattern som fungerade: getaccess[\(]+([a-zA-Z\$\[\]\'\'\"\"]+)[\)]

Senast redigerad 2017-03-14 16:03
2017-03-14 21:38#6

riille
Ingen klan

BrutalCS Uberlegend
3355


Citat av k0nan

Citat av Evilkenevil

Känns som att du borde vända dig till forum inriktad mot detta :Pd!

400 PHP dokument som använder den föråldrade mySQL? Känns som det är bättre att skriva om funktionerna och göra det rätt. Funktioner för databasen borde ligga på ett centralt ställe och hämtas när den behövs, och smart kodat innebär det att du bara behöver ändra på ett ställe för att uppdatera det överallt

Var länge sedan jag körde PHP; men försök effektivisera hur du skriver funktionerna istället.


Det är ju effektiviserat. Funktionerna finns på ett specifikt ställe och kallas på lite överallt i dessa 400 dokument. Men det är när man kallar på en funktion som man måste passa med anslutningen med MySQLi.

................

Update: Hittade en pattern som fungerade: getaccess[\(]+([a-zA-Z\$\[\]\'\'\"\"]+)[\)]

Låter som att du skulle behöva någon sorts controller/handler som hanterar ditt metod-anrop. Då hade du t.ex. bara behövt ändra på ett ställe, i controllern/handlern. Eller är jag ute och cyklar? :)
Det är bättre att fråga och verka dum, än att inte fråga och förbli det.
2017-03-15 07:45#7

k0nan
Ingen klan

BrutalCS Poet
2206


Citat av riille


Citat av k0nan

Citat av Evilkenevil

Känns som att du borde vända dig till forum inriktad mot detta :Pd!

400 PHP dokument som använder den föråldrade mySQL? Känns som det är bättre att skriva om funktionerna och göra det rätt. Funktioner för databasen borde ligga på ett centralt ställe och hämtas när den behövs, och smart kodat innebär det att du bara behöver ändra på ett ställe för att uppdatera det överallt

Var länge sedan jag körde PHP; men försök effektivisera hur du skriver funktionerna istället.


Det är ju effektiviserat. Funktionerna finns på ett specifikt ställe och kallas på lite överallt i dessa 400 dokument. Men det är när man kallar på en funktion som man måste passa med anslutningen med MySQLi.

................

Update: Hittade en pattern som fungerade: getaccess[\(]+([a-zA-Z\$\[\]\'\'\"\"]+)[\)]

Låter som att du skulle behöva någon sorts controller/handler som hanterar ditt metod-anrop. Då hade du t.ex. bara behövt ändra på ett ställe, i controllern/handlern. Eller är jag ute och cyklar? :)


Saken är den att med MySQLi måste du nämna din anslutning i varje query. Gör jag en query i min funktion måste jag då passa anslutningens namn när jag kallar på funktionen, eftersom anslutningens namn inte är global heller. Det hade varit bättre om min kod använt PDO men det är alldeles för bökigt att migrera till i detta projekt.

Exempel:

Nuvarande kod (MySQL):
Kod
1echo isuseradmin($user);
2
3function isuseradmin($user) {
4return mysql_num_rows(mysql_query("SELECT id FROM users WHERE admin="1" AND user="$user"));
5}


Uppdaterad kod (MySQLi):
Kod
1echo isuseradmin($user, $con);
2//passar $con (anslutningen) till funktionen
3
4function isuseradmin($user, $con) {
5return mysqli_num_rows(mysqli_query($con, "SELECT id FROM users WHERE admin="1" AND user="$user"));
6// Använder $con i queryn för att komma åt databasen
7}


Men min gyllene regexkod har gjort mitt liv mycket enklare :)
Jag har även uppdaterat den lite:

Find: (minfunktion)[\(]+([a-zA-Z\$\[\]\'\"\,0-9\= ]+)[\)]
Replace: $1($2, $con)
6 kommentarer, visar 1-6 - Första « [1] » Sista
AKTIVA TRÅDAR