有人可以帮我解决这个代码我搞砸了吗?它不会再更新我的数据库了。
DEFINE('DB_USER', 'root');
DEFINE('DB_PASSWORD', '');
DEFINE('DB_HOST', 'localhost');
DEFINE('DB_NAME', 'tags');
if ($dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)) {
if (!mysql_select_db(DB_NAME)) {
trigger_error("Could not select the database!\n<br />MySQL Error: " . mysql_error());
include('./includes/footer.htm');
exit();
}
} else { // If it couldn't connect to MySQL.
trigger_error("Could not connect to MySQL!\n<br />MySQL Error: " . mysql_error());
include('./includes/footer.htm');
exit();
} // End of $dbc IF.
$tag = mysql_real_escape_string($_POST['tag']);
$query = 'UPDATE tags SET count = count+1 WHERE tag = '.$tag;
mysql_query($query, $dbc);
if (!mysql_affected_rows()) {
$query = 'INSERT INTO tags (tag, count) VALUES('.$tag.', 1)';
if (!mysql_query($query,$dbc)) {
die('Error: ' . mysql_error());
}
echo "1 record added";
}
mysql_close($dbc);
答案 0 :(得分:6)
假设您在tags.tag
上有唯一或主键约束,使用MySQL的ON DUPLICATE KEY
功能在一个查询中执行此操作会更简单:
$tag = mysql_real_escape_string($_POST['tag']);
$query = "INSERT INTO tags (tag, count) VALUES ('$tag', 1)
ON DUPLICATE KEY UPDATE count = count+1";
mysql_query($query, $dbc);
还要注意我对引号做了什么。我在SQL查询字符串周围使用双引号,这允许我直接在字符串中插入PHP变量。无需结束字符串并与“.
”或任何内容连接。
然后我在SQL中围绕字符串文字使用单引号。这样做可以使所有内容更具可读性,并帮助您避免忘记在SQL中引用字符串。
PS:在UPDATE之后使用mysql_affected_rows()
时你应该知道,即使一行匹配,受影响的行也可以为零,因为如果更新没有对任何值进行净更改,则不会计算作为受影响的行。即试试“UPDATE tags SET count=count
;”即使它适用于每个行,它仍会报告零受影响的行。
此提示不适用于您的示例,因为count=count+1
必然会更改值。我只是提到它将来使用mysql_affected_rows()
。
答案 1 :(得分:5)
你应该阅读上一个问题的答案,你仍然缺少sql查询中$ tag周围的引号。
$query = "UPDATE tags SET count = count+1 WHERE tag = '".$tag."'";
$query = "INSERT INTO tags (tag,count) VALUES('".$tag."',1)';
答案 2 :(得分:3)
是的,这条线:
$query = 'UPDATE tags SET count = count+1 WHERE tag = '.$tag;
应如下所示:
$query = "UPDATE tags SET count = count+1 WHERE tag = '".$tag . "'";
冷却。
答案 3 :(得分:2)
我要做的第一件事是删除所有自定义错误处理,以确保它真正连接。要么是这样,要么一起改变查询。此外,更新到mysqli
也不会受到伤害。所以首先尝试更改连接:
DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'tags');
$dbc = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($dbc -> connect_error) {
echo "Could not select the database!\n MySQL Error: ".$dbc -> connect_error;
include ('./includes/footer.htm');
exit();
}
如果您没有收到上述错误,则表示您已连接。然后像这样输入一个虚拟查询:
$test_query = "SELECT * FROM tags WHERE count = 1";
$test_results = $dbc->query($test_query);
然后您可以添加一个简单的检查,以便您可以转到真实的查询,例如:
if($test_results -> num_rows > 0) {
$tag = mysql_real_escape_string($_POST['tag']);
$update_query = "UPDATE tags SET count = count+1 WHERE tag = '$tag'";
$dbc -> query($update_query);
如果每个查询都存在错误,则抛出错误:
echo ($dbc -> error) ? $dbc -> error : "";
if($dbc -> affected_rows < 1 ) {
$insert_query = "INSERT INTO tags (tag,count) VALUES('$tag',1)";
$dbc -> query($insert_query);
echo ($dbc -> error) ? $dbc -> error : "1 record added";
}
}
$dbc -> close();
答案 4 :(得分:0)
$query = "UPDATE tags SET count = count+1 WHERE tag = '".$tag . "'";
这应该被捐赠!
答案 5 :(得分:0)
window.app = {}
// d3 stuff - id like to get some server side data in here
indow.app.RenderGraph = function (node, width, height) {
var nodes
, links
, canvas
, canvasBorder
, force
, charge = -500
, gravity = 0.17
, linkDist = 70
, nodeRadius = 30
// The function used to build the color
// scale used to paint the nodes.
, fill = d3.scale.category20();
$(document).ready(function() {
var node = $("#canvas").get(0);
window.app.RenderGraph(node, 400, 400);
});
缩短查询次数