我创建了一个函数但它不起作用。在盯着它看了15分钟后尝试不同的方式,我无法让它工作。谁能告诉我我的语法有什么问题?变量$user_id
是一个数字,$input
是一个字符串。我知道mysql已被弃用,这是我正在努力的事情。我只是想知道sql有什么问题,因为毕竟它是一个sql问题。
function insert_what_i_do( $user_id, $input)
{
if (mysql_result(mysql_query("SELECT `user_id` FROM `profile` WHERE `user_id` = $user_id"), 0) !== 1)
{
mysql_query("INSERT INTO `profile` (user_id, what_i_do) VALUES ($user_id, '$input')");
}
else
{
mysql_query("UPDATE `profile` SET `what_i_do` = '$input' WHERE `user_id` = $user_id");
}
};
答案 0 :(得分:6)
这是普通的MySQL
,请仔细看看我在那里做了什么,并且不建议再使用mysql_*
函数,因为它们已被弃用。请注意引用的$input
?
<?php
function insert_what_i_do( $user_id, $input) {
$input = mysql_real_escape_string($input);
$query = mysql_query("SELECT `user_id` FROM `profile` WHERE `user_id` = '".(int)$user_id."'");
$num = mysql_num_rows($query);
if($num) {
$query = mysql_query("UPDATE `profile` SET `what_i_do` = '".$input."' WHERE `user_id` = '".(int)$user_id."'");
} else {
$query = mysql_query("INSERT INTO `profile` (`user_id`, `what_i_do`) VALUES ('".(int)$user_id."', '".$input."')");
}
}
?>
您需要学习使用PDO:
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
function insert_what_i_do( $user_id, $input) {
global $db;
$stmt = $db->query("SELECT `user_id` FROM `profile` WHERE `user_id` = :user_id");
$stmt->execute(array(':user_id' => $user_id));
$num = $stmt->rowCount();
if($num) {
$stmt = $db->query("UPDATE `profile` SET `what_i_do` = :input WHERE `user_id` = :user_id");
$stmt->execute(array(':user_id' => $user_id, ':input' => $input));
} else {
$stmt = $db->query("INSERT INTO `profile` (`user_id`, `what_i_do`) VALUES (:user_id, :input)");
$stmt->execute(array(':user_id' => $user_id, ':input' => $input));
}
}
?>
答案 1 :(得分:3)
解决PHP问题后,请注意您当前在3个mysql查询/语句中尝试做的事情可以在一个中完成 - 假设user_id
是主键或唯一键:
INSERT INTO profile
(user_id, what_i_do)
VALUES
('$user_id', '$input')
ON DUPLICATE KEY UPDATE
what_i_do = VALUES(what_i_do) ;
答案 2 :(得分:1)
您似乎错过了$input
的更新查询中的单引号:
mysql_query("UPDATE `profile` SET `what_i_do` = '$input' WHERE `user_id` = $user_id");
但我也看不到你制作 mysql连接的任何地方。