我写了下面的代码,但它没有更新数据库,它是脚本的一部分,它停止工作..无法找到解决方法..需要建议
<?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);
?>
答案 0 :(得分: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甚至具有独立于数据库的优势,使得使用现有代码更容易使用另一个数据库。
答案 1 :(得分:2)
正确的更新sql子句是这样的:
UPDATE table
SET column = expression;
OR
UPDATE table
SET column = expression
WHERE predicates;
您的查询应该是这样的:
$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);
当然,您需要指定要更新的行(id),否则,整个表格会将列$name
设置为$usernames
。
<强>更新强>
因为您在空表中插入数据,所以应首先执行$ update1查询,然后执行$ update query。 UPDATE
子句不会在空表上进行更改/插入。
答案 2 :(得分:2)
问题1:使用正确的“插入”(创建新记录)与“更新”(修改现有记录)
问题2:在调用mysql_query()之前创建SQL字符串是个好习惯,这样就可以将其打印出来进行调试
问题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());
答案 3 :(得分:0)
您的更新SQL有INSERT关键字,应该更改为UPDATE:
$update = "UPDATE sanjana SET $name ='$usernames'";