WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   PHP-script som tar bort MYSQL som saknar en viss data (https://www.wn.se/forum/showthread.php?t=1059140)

Dakota 2013-09-15 11:59

PHP-script som tar bort MYSQL som saknar en viss data
 
Jag använder MYSQL till ett av mina system. Alla virtuella städer sparas i databasen och information om städerna sparas i kolumner. Ibland inträffar det att kolumnen "Mayor" som sparar ägaren av staden lämnas tom, vilket gör att hela systemet sätts i felläge.

För att åtgärda detta behöver jag logga in och ta bort den stad i databasen som saknar information i kolumnen "Mayor". När det är gjort är det fixat.

Jag skulle vilja att personalen som hjälper mig har tillgång till att fixa detta utan att de ges fullständig åtkomst till PHPMyAdmin. Därför slog tanken mig att man borde kunna fixa det ganska enkelt med ett PHPscript.

Jag sökte runt lite och hittade nedanstående script som jag modifierat lite, tror ni det skulle funka?

PHP-kod:

<?php
$con
=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo 
"Failed to connect to MySQL: " mysqli_connect_error();
  }

mysqli_query($con,"DELETE FROM TOWNY_TOWNS WHERE mayor=''");

mysqli_close($con);
?>

Det jag är osäker på är hur man ska visa scriptet att kolumnen mayor ska vara tom. Var det korrekt att skriva '' utan info inuti?

ANttila 2013-09-15 12:07

Du kan även kolla efter rader där mayor "= 0" i längd och "= NULL".

Skulle rekommendera att du tar bort staden i samma veva när du sätter just mayor till ett tomt värde.

Tsarraz 2013-09-15 12:11

Jag hade nog hellre gjort så scriptet flyttade "förbjudna staden" till felaktiga städer databasen. Så inte nån gjort fel bara och blir förbannand på dig.

Dakota 2013-09-15 12:13

Citat:

Ursprungligen postat av ANttila (Inlägg 20477335)
Du kan även kolla efter rader där mayor "= 0" i längd och "= NULL".

Skulle rekommendera att du tar bort staden i samma veva när du sätter just mayor till ett tomt värde.

Som jag förstår det så är det precis det som scriptet gör? I exemplet på sidan där jag hittade det försvann hela alltet från databasen eftersom just informationen i kolumnen var xxx så då borde väl samma sak ske om informationen är ingenting alls?

http://www.w3schools.com/php/php_mysql_delete.asp

Citat:

Ursprungligen postat av Tsarraz (Inlägg 20477336)
Jag hade nog hellre gjort så scriptet flyttade "förbjudna staden" till felaktiga städer databasen. Så inte nån gjort fel bara och blir förbannand på dig.

Systemet fungerar inte på det sättet. Så det är ej aktuellt.

ANttila 2013-09-15 12:21

Citat:

Ursprungligen postat av Dakota (Inlägg 20477337)
Som jag förstår det så är det precis det som scriptet gör? I exemplet på sidan där jag hittade det försvann hela alltet från databasen eftersom just informationen i kolumnen var xxx så då borde väl samma sak ske om informationen är ingenting alls?.

Ett fält som har värdet NULL är inte samma sak som att ett fält har en tom sträng som värde ("").

Jag vet inte hur du sätter mayor till "tomt". Om inte du heller vet det, så kolla efter fält som både har en tom sträng eller värdet NULL.

Dakota 2013-09-15 12:23

Citat:

Ursprungligen postat av ANttila (Inlägg 20477338)
Ett fält som har värdet NULL är inte samma sak som att ett fält har en tom sträng som värde ("").

Jag vet inte hur du sätter mayor till "tomt". Om inte du heller vet det, så kolla efter fält som både har en tom sträng och värdet NULL.

Förstår inte alls vad du menar. Jag har inte heller gjort systemet som detta ska funka mot, utan det är ett plugin till en spelserver. Det jag vet är att när kolumnen "mayor" är tom så måste staden tas bort för annars kan felet ej lösas.

Om jag försöker förstå dig; Finns det olika sätt att spara ett tomt värde på och man måste veta vilket för att kunna ta bort det från databasen?!

Tsarraz 2013-09-15 12:28

Du kan i MySql bestämma grundvärdet på ditt databasinlägg . Ofta null eller 0.

ANttila 2013-09-15 12:29

Citat:

Ursprungligen postat av Dakota (Inlägg 20477339)
Förstår inte alls vad du menar. Jag har inte heller gjort systemet som detta ska funka mot, utan det är ett plugin till en spelserver. Det jag vet är att när kolumnen "mayor" är tom så måste staden tas bort för annars kan felet ej lösas.

Om jag försöker förstå dig; Finns det olika sätt att spara ett tomt värde på och man måste veta vilket för att kunna ta bort det från databasen?!

Ja, du kan antingen göra det helt tomt (NULL) eller sätta en sträng som inte har några tecken i sig ("").

Så jag rekommenderar att du kollar efter båda alternativen.

Dvs:
Kod:

DELETE FROM TOWNY_TOWNS WHERE TRIM(mayor) = '' OR mayor IS NULL

Conny Westh 2013-09-15 15:29

Citat:

Ursprungligen postat av Dakota (Inlägg 20477339)
Förstår inte alls vad du menar. Jag har inte heller gjort systemet som detta ska funka mot, utan det är ett plugin till en spelserver. Det jag vet är att när kolumnen "mayor" är tom så måste staden tas bort för annars kan felet ej lösas.

Om jag försöker förstå dig; Finns det olika sätt att spara ett tomt värde på och man måste veta vilket för att kunna ta bort det från databasen?!

Du angriper problemet från fel håll.

Du ska införa en regel (constraint) som redan i databasen förhindrar att tupler (förekomster) med Mayor som är NULL aldrig lagras. Skulle en användare försöka spara detta så ska denne få ett felmeddelande.

Felet som du beskriver ska ju aldrig kunna förekomma. Då ska du förhindra att det uppkommer.

Om Mayor är en referens till en primärnyckel i en annan tabell kallas det för "främmande nyckel" (förkortat FK) "Forreign key" på engelska du kan definiera kolumnen att vara "NOT NULL".

tartareandesire 2013-09-17 11:32

Jag tycker precis som Conny att alla lösningar som föreslagits är helt fel väg att gå. Det är att lösa ett problem som aldrig ska behöva uppstå. Se istället till att man inte kan lägga in en stad utan borgmästare. Ifall det är möjligt att göra detta i nuläget (vilket jag förmodar med tanke på att problemet uppstår) så gör ni personer som börjat spela utan namn (?) sura i onödan. Om det går att börja spela utan namn så går det kanske också att ändra namn till en tom sträng? Gör någon detta av misstag (eller pga intrång) så försvinner deras stad?

Men, ja, den kod du presenterade raderar städer där mayor är en tom sträng (inte NULL). Ifall det finns data kopplad till dessa städer i andra tabeller utan FK så kommer denna emellertid ligga kvar och skräpa. Det finns i så fall förhoppningsvis någon metod / funktion / kod i pluginet eller spelservern för att ta bort en stad "på riktigt". Men jag tycker som sagt var att det är en riktigt dålig lösning på problemet.


Alla tider är GMT +2. Klockan är nu 09:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson