2012-06-24 5 views
0

я написал следующий код, но его не обновляют базу данных ,, ее часть сценария и перестают work..cant найти путь вокруг него .. нужны предложенияне обновление базы данных SQL

<?php 
$link = mysql_connect('xxxxxxxx'); 
if (!$link) { 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("xxx", $link); 


$usernames='aneeshxx'; 
echo $usernames; 

$update = "INSERT sanjana SET $name ='$usernames'"; 
mysql_query($update, $link); 

$update1 = "INSERT INTO sanjana (name)VALUES ($usernames)"; 
mysql_query($update1, $link); 


?> 
+1

'mysql_ error()' и 'mysql_ errno()' ваши лучшие друзья ... – CodeZombie

+0

Пожалуйста, для вас, перестань использовать функции mysql !!! У вас PDO, MySQLi и много слоев абстракций с ORM, сопоставление объектов и многое другое !!!! Функции mysql отстойны. – Exos

ответ

0

Вы ВСТАВИТЬ ключевое слово для вашего SQL обновления, то это должно быть изменено на UPDATE:

$update = "UPDATE sanjana SET $name ='$usernames'"; 
+0

nope жаль, что он не работает :( – Tina

+0

его пустой стол, я вставляю данные – Tina

2

право обновления пункт SQL, как так:

UPDATE table 
SET column = expression; 

ИЛИ

UPDATE table 
SET column = expression 
WHERE predicates; 

SQL: UPDATE Statement

Ваш запрос должен быть таким:

$update = "UPDATE sanjana SET $name ='$usernames'"; 
mysql_query($update, $link); 

Конечно вам нужно указать строку для обновления (идентификатор), другой мудрый, весь стол будет установлен колонка $name до $usernames.

UPDATE:

Поскольку вы вставляете данные в пустую таблицу, вы должны сначала выполнить $ update1 запрос затем выполнить запрос на обновление $. Предложение UPDATE не будет изменять/вставить на пустой столбец.

2

Задача 1: использовать правильный «вставить» (создать новый рекорд) против «обновление» (изменить существующую запись)

Задача 2: Это хорошая практика, чтобы создать SQL строку перед тем вы звоните mysql_query(), так что вы можете распечатать его для отладки

Задача 3: Это также хорошая практика для обнаружения ошибок

Пример:

<?php 
    $link = mysql_connect('xxxxxxxx') 
    or die('Could not connect: ' . mysql_error()); 

    mysql_select_db("xxx", $link); 

    $usernames='aneeshxx'; 
    $sql = "INSERT INTO sanjana (name) VALUES ('" . $usernames + ")"; 
    echo "sql: " . $sql . "...<br/>\n"; 
    mysql_query($sql, $link) 
    or die(mysql_error()); 
+0

Спасибо за ответ .. это показывает, что запрос был пуст :( – Tina

+0

BTW: Harald Brinkhof абсолютно прав в том, что нужно «защищать» ваш сервер используя «подготовленные заявления», а не сырые строки SQL (строки SQL, созданные из непосредственно из веб-входа, * чрезвычайно * уязвимы для * очень опасных атак SQL Injection). ["PHP Data Objects"] (http: // www. phpeveryday.com/articles/PDO-Prepared-Statement-P550.html) (PDO) - отличный способ смягчить этот риск. – paulsm4

3
$update = "INSERT sanjana SET $name ='$usernames'"; 

это, вероятно, имеется в виде как UPDATE заявления, поэтому для обновления должно быть

$update = "UPDATE sanjana set name = '$usernames'"; 

Я поставил name и не $name из-за ваш второй запрос и не видя $name определяются в любом месте. Имейте в виду, что это изменит значение в столбце name каждой строки в таблице sanjana на значение $ usernames, как правило, утверждение, подобное этому, ограничено conditions, например.WHERE userid = 33

$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)"; 

для INSERT заявления он должен иметь значение цитируемого так

$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')"; 

Будьте осторожен, что этот способ ввода переменных непосредственно в строку запроса делает вас уязвимым для SQL injection, чтобы бороться с этим, пожалуйста, используйте удлинители PDO или mysqli, они оба защитят вас от инъекций, предоставив вам prepared statements; простой старый mysql_ * больше не рекомендуется использовать.

с помощью PDO вы будете использовать подготовленные заявления, как этого

<?php 
// we got $usernames from wherever you define it 

$pdo = new PDO('mysql:dbname=mydb;host=localhost','username','password'); 

// to insert 
$statement = $pdo->prepare('INSERT INTO `sanjana` (name) VALUES (:name)'); 
// the following replaces :name with $usernames in a safe manner, defeating sql injection 
$statement->bindParam(':name',$usernames); 
$statement->execute(); // it is done 


// to update 
$statement = $pdo->prepare('UPDATE `sanjan` SET `name` = :name'); 
$statement->bindParam(':name',$usernames); 
$statement->execute(); // it is done 

так, как вы можете увидеть защиты коды от вредоносного ввода не трудно и даже делают ваши заявления SQL намного легче читать. Вы заметили, что вам больше не нужно было указывать свои значения в инструкции SQL? Подготовленные заявления позаботятся об этом для вас! Еще один способ получить ошибку в коде.

Пожалуйста, прочитайте об этом, это избавит вас от головных болей. PDO даже имеет то преимущество, что он независим от базы данных, что упрощает использование другой базы данных с существующим кодом.

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