我写了下面的代码,但它没有更新数据库,它是脚本的一部分,它停止work..cant寻找绕过它的方法。需要建议
<?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);
?> 发布于 2012-06-25 06:02:30
$update = "INSERT sanjana SET $name ='$usernames'";这可能表示为一条UPDATE语句,因此对于更新,它应该是
$update = "UPDATE sanjana set name = '$usernames'";由于您的第二个查询,我放入了name而不是$name,没有看到任何地方定义了$name。请注意,这会将sanjana表中每一行的列name中的值更改为$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甚至具有独立于数据库的优势,这使得在现有代码中使用另一个数据库变得更容易。
发布于 2012-06-25 05:56:57
正确的update sql子句如下:
UPDATE table
SET column = expression;或
UPDATE table
SET column = expression
WHERE predicates;您的查询应如下所示:
$update = "UPDATE sanjana SET $name ='$usernames'";
mysql_query($update, $link);当然,您需要指定要更新的行(id),否则,整个表会将列$name设置为$usernames。
更新:
因为要在空表中插入数据,所以应该先执行$update1查询,然后再执行$update查询。UPDATE子句将不对空表进行更改/插入。
发布于 2012-06-25 06:01:37
问题1:使用正确的"insert into“(创建新记录)与"update”(修改现有记录)
问题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());https://stackoverflow.com/questions/11181494
复制相似问题