0

関数を作成しましたが、機能しません。さまざまな方法を試して 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");
    }
};
4

3 に答える 3

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));
        }
    }
?>
于 2012-09-01T01:06:31.220 に答える
3

PHP の問題を解決した後、現在 3 つの mysql クエリ/ステートメントで実行しようとしていることが、1 つで実行できることに注意してください。それ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) ;
于 2012-09-01T01:15:22.823 に答える
1

次の更新クエリで一重引用符を見逃しているようです$input

mysql_query("UPDATE `profile` SET `what_i_do` = '$input' WHERE `user_id` =  $user_id");

しかし、私はあなたがmysql接続をしているところもどこにも見当たりません。

于 2012-09-01T01:07:24.850 に答える