SearchEngines.bg

Това е примерно съобщение за гост. Регистрирайте безплатен акаунт днес, за да станете потребител на SearchEngines.bg! След като влезете, ще можете да участвате в този сайт, като добавите свои собствени теми и публикации, както и да се свържете с други членове чрез вашата лична входяща кутия! Благодарим ви!

Изтриване на ред от SQL БД

Илиев

Well-known member
Искам да изтрия един ред от SQL база данни без да правя експорт/импорт.

Реда не е в нито една таблица, а е още на първият ред от базата.

Има ли някаква команда, с която да премахна този ред? Единственото, което намерих е за триене от таблица, но в случая май не ми върши работа.

Благодаря, дано съм обяснил правилно.
 
Re: Изтриване на ред от SQL БД

Ето това са първите редове:

-- phpMyAdmin SQL Dump
-- version 2.11.9.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Oct 29, 2008 at 06:18 AM
-- Server version: 5.0.45
-- PHP Version: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `----------`
--

-- --------------------------------------------------------

--
-- Table structure for table `AMCMS_ads`
CREATE TABLE IF NOT EXISTS `AMCMS_ads` (
`primkey` int(11) NOT NULL auto_increment,
`adname` varchar(255) NOT NULL,
`adtype` varchar(255) NOT NULL,
`position` varchar(255) NOT NULL,
`width` int(11) NOT NULL,
.
.
.
--

Реда, който искам да изтрия, стига това да не прецака цялата база :)

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

той май не е в таблица и предполагам се явява някаква характеристика на базата?
 
Последно редактирано:
Re: Изтриване на ред от SQL БД

Как познах;)
Не виждам с какво ти пречи тази клауза? Реално тя е валидна само за отворената връзка! След като си изпълнил import-а тази клауза вече не е валидна:)
 
Re: Изтриване на ред от SQL БД

Не съм сигурен дали тя пречи, но в момента при опит да отворя несъществуваща страница на сайта, вместо 404 получавам ето тази грешка:

A QUERY FAILED: UPDATE `AMCMS_games` SET `totalplays`=`totalplays`+1 WHERE `primkey`=;
DETAILS: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Доколкото намерих информация, след изтриването на този ред проблема се оправял.

ЕДИТ: Всичко тръгна от там, че един път трих базата, след това я импортнах и се започна с тези грешки. Причината била в различните версии на сървъра от който се експортва и сървъра на който се импортва. Не знам дали е така, както виждате съм пълен лаик в тази област. :)
 
Re: Изтриване на ред от SQL БД

Ясно се вижда, че заявката ти е грешна и определено изтриването на този ред няма да оправи нещата.
Проблема е в заявката и конкретно в това, че в WHERE-а не се подава нещо за primkey.
 
Re: Изтриване на ред от SQL БД

Конкретно тази заявка не мисля, че затова ти гърми. Просто е подадена празна стойност към where клаузата.
 
Re: Изтриване на ред от SQL БД

Ами когато се потърси игра с несъществуващ в базата primkey или друга страница, която не съществува, връща това.

Тоест, да търся проблема в кода, а не в базата?

Предположих, че е базата, тъй като проблема се появи след като си играх с нея. :)
 
Re: Изтриване на ред от SQL БД

Ами когато се потърси игра с несъществуващ в базата primkey или друга страница, която не съществува, връща това.

Тоест, да търся проблема в кода, а не в базата?

Предположих, че е базата, тъй като проблема се появи след като си играх с нея. :)

това е UPDATE т.е. запис в базата а не търсене. Така че можеби преди това има търсене и това е статистика. Просто не изпълнявай заявката еко не е намерен резултат преди това.
 
Re: Изтриване на ред от SQL БД

NO_AUTO_VALUE_ON_ZERO - не съм го ползвал, но определено би трябвало да не слага стойности когато се ъпдейтва дадено поле т.е. ако не подадеш стойност, това да слага 0 /за int полета/.

В твоя случай обаче нямаш ид в ъпдейт sql-a.

по хамалския начин се оправя така намираш къде е този sql и слагаш:
UPDATE `AMCMS_games` SET `totalplays`=`totalplays`+1 WHERE `primkey`='';

ако искаш по-елегантно - първо проверяваш дали има такъв запис /с sql/ и ако няма да не изпълнява този update.
 
Re: Изтриване на ред от SQL БД

ако искаш по-елегантно - първо проверяваш дали има такъв запис /с sql/ и ако няма да не изпълнява този update.
Не е ли по-добре да направи една проверка с PHP дали стойността, която подава е различна от празен string?
 
Re: Изтриване на ред от SQL БД

Ето кода, от който мисля че идва всичко:

PHP:
<?PHP

am_session();
if ($_SESSION['tokens_remaining'] > 0) {$checkTokens = true;} else {$checkTokens = false;}
am_session('subtracttokens'); // Subtracks tokens (if turned on) for unregistered players.

if(am_authenticateGame($_GET['gameid'])!=false) { // This function is used to insure the data is numeric for $_GET['gameid']
	$got_gamename = am_injection($_GET['gamename']);
	$got_gameid = am_injection($_GET['gameid']);
} else {
	exit; // Should fail before this
}
$countgames = am_countrecords($db, "SELECT * FROM `AMCMS_games` WHERE `primkey`=$got_gameid;");
if($countgames == 0)
{
   header ('HTTP/1.1 301 Moved Permanently');
   header ('Location: ./index.php');
   exit;
}
$gameres = am_queries($db, "SELECT * FROM `AMCMS_games` WHERE `primkey`=$got_gameid;");
am_adBeforeGame($gameres); // Loads the "ads before games" and game sponsorship abilities.  We do not use require_once because this file may need to be loaded several times
$isFlashGame = true; // This is for the top.php file in each theme.

if ($globalmeta == "1") {
	$sitetitle = $gameres[0][1] .' - '. $sitetitle;
	$metadesc = $gameres[0][2];
	$metakeywords = $gameres[0][3];
}

и т.н.

301 редиректа съм го сложил за да не излизат грешките в момента, но по принцип не ми върши работа. Искам нормални 404. :)
 
Re: Изтриване на ред от SQL БД

Нали гърмежа идва от Update? тук няма такова, а и дори да беше в някоя функция, тя не присъства.

А грешката кога ти се появява? При грешно /няма го в базата/gameid или при липсващо /не е спомената в урл-а/?

Това update по скоро бих го търсил по-надолу в кода, защото според мен това е някакъв каунтер на играчите, който се ъпдейтва. И просто него трябва да го заградиш с if($countgames == 0) {//kod za update} за да не гърми
 
Re: Изтриване на ред от SQL БД

Грешката се получава и при двата случая:

1. ако в базата няма такова id

2. при адрес, в който не се споменава id, примерно home.html, но не съществува на сървъра.

Ето още код:

PHP:
	if(am_authenticateGame($_GET['gameid'])!=false) { // This function is used to insure the data is numeric for $_GET['gameid']
		$got_gamename = am_injection($_GET['gamename']);
		$got_gameid = am_injection($_GET['gameid']);
	} else {
		exit; // Should fail before this
	}

	$gameres = am_queries($db, "SELECT * FROM `AMCMS_games` WHERE `primkey`=$got_gameid;");
	require('./includes/gameads.php');

Май ще чакам съпорта да измисли нещо, да не ви занимавам повече.
 
Re: Изтриване на ред от SQL БД

Покажи ми функцията am_injection()
Направи търсене в сорса за "SET `totalplays`=`totalplays`+1" и ми покажи реда заедно със сорса наоколо.
НИК, до някъде си прав, но не е гадаене! Заявката се генерира от php-то и явно няма проверка за липсваш primkey, а направо се update-ва.
 

Горе