2014-12-15 2 views
-3

У меня есть этот PHP-код, который должен проверять, нет ли слова в базе данных. Если это так, он просто добавляет один к числу раз, когда было выбрано слово. Если он не находится в базе данных, он добавляет его. Проблема, с которой я сталкиваюсь, заключается в том, что она не обновляет мою базу данных. Я проверил, что все правильно соединяется, и это даже эхо слова, которое было выбрано. Он просто не обновится. Мой код выглядит следующим образом:PHP не будет обновлять базу данных MYSQL

<?php 

include 'swearTrackDB.php'; 
$conn = mysql_connect($host,$user,$pass) or die ('could not connect'); 
$dbs = mysql_select_db($databaseName, $conn) or die ('could not reach database'); 

if(isset($_POST['mash'])) { 
$mash = $_POST['mash']; 

$query = mysql_query("SELECT * FROM tracker1 WHERE string='$mash'"); 
if(mysql_num_rows($query) > 0) { 

    $sql = "UPDATE tracker1 SET count = count + 1 WHERE string = $mash"; 

}else{ 

    $sql = "INSERT INTO tracker1 ('string') VALUES ('$mash')"; 
} 

} 

?> 

Помогите! Я не могу понять это, и я искал часы!

Заранее спасибо


Даже значительно обновить свой код, это не дает мне никаких ошибок на всех, но она до сих пор не проводки в базу данных. Кто-нибудь еще хочет помочь мне исправить мою тупую проблему?

<?php 

include 'swearTrackDB.php'; 
$conn = mysql_connect($host,$user,$pass) or die ('could not connect'); 
$dbs = mysql_select_db($databaseName, $conn) or die ('could not reach database'); 

if(isset($_POST['mash'])) { 
$mash = $_POST['mash']; 

$query = mysql_query("SELECT * FROM tracker1 WHERE string='$mash'"); 
if(mysql_num_rows($query) > 0) { 

    $updatequery = mysql_query("UPDATE tracker1 SET count = count + 1 WHERE string = $mash"); 

    mysql_select_db('tracker1'); 
    $sql = mysql_query($sql, $conn); 
    if(! $retval) 
    { 
     die('Could not update data: ' . mysql_error()); 
    } 
    echo "Updated data successfully\n"; 
    mysql_close($conn); 

}else{ 

    $sql = mysql_query("INSERT INTO tracker1 ('string', 'count', 'upvote', 'downvote') VALUES  ('$mash', '1', '0', '0')"); 

    mysql_select_db('tracker1'); 
    $retval = mysql_query($sql, $conn); 
    if(! $retval) 
    { 
     die('Could not update data: ' . mysql_error()); 
    } 
    echo "Updated data successfully\n"; 
    mysql_close($conn); 
} 

} 

?> 
+2

Вы не используете переменная '$ sql' для чего угодно. –

+0

Я знаю, я попытался избавиться от него, и он ничего не сделал, поэтому я сохранил их – Axiile

+0

Чтобы быть ясным: ** вы не выполняете никаких запросов 'UPDATE' или' INSERT'! ** – deceze

ответ

1

Заменить этот линейный код

$sql = "UPDATE tracker1 SET count = count + 1 WHERE string = $mash"; 

с:

$updatequery = mysql_query("UPDATE tracker1 SET count = count + 1 WHERE string = $mash"); 

и эта линия:

$sql = "INSERT INTO tracker1 ('string') VALUES ('$mash')"; 

с:

$insertquery = mysql_query("INSERT INTO tracker1 ('string') VALUES ('$mash')"); 
3

В своем первом случае код, я могу видеть, где вы выполнения select запрос, но обновления и вставки не получают волшебно выполнены только потому, что вы поместите их в строку переменной :-)

Вам нужно позвоните по телефону mysql_query.

Но, в любом случае, это ужасная идея ни в чем, кроме строгих однопользовательских сред, поскольку у вас есть условие гонки. Между вашими select и insert/update, кто-то еще может войти и изменить базу данных под вами.

Я подозреваю, что лучшим вариантом было бы использовать insert ... on duplicate key update ... функциональность MySQL, как описано here:

insert into tracker1 (`string`) values ('$mash') 
on duplicate key update `count` = `count` + 1 

Заметны также кавычку на имя столбца, а не одной кавычки, и вы можете хотите (в какой-то момент) найти sql injection или little bobby tables, чтобы узнать, почему слепо использование unsanitised $mesh в ваших запросах опасно в чем-либо кроме Mickey Mouse (a) приложений.

Касание на котировки немного больше в глубину, если вы используете ' в запросах:

create table xyzzy (a int); 
insert into xyzzy ('a') values (1); 

вы увидите что-то вдоль линий:

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: 
    "'a') values (1)" at line 1: insert into xyzzy ('a') values (1) 

имен столбцов может быть окружен обратными зажимами, чтобы защитить их от анализатора SQL, но не цитаты. Это предыдущий запрос должен быть написан как:

create table xyzzy (a int); 
insert into xyzzy (`a`) values (1); 

(а) Микки Маус является зарегистрированным товарным знаком компании Walt Disney, но я больше, используя его в смысле жаргоне «неважно , тривиальным ". Извиняюсь перед Дисней заранее, я не хочу неоправданно ослаблять ваш товарный знак, но если у вас есть проблемы с моим использованием, вы можете взять его с помощью Словаря американского наследия :-)

Смежные вопросы