1

これは私が使用しているコードです:

<?php
// Set the MySQL Configuration
$db_host       = "";
$db_user       = "";
$db_password   = "";
$db_name       = "";
$db_table      = "";

// Start Connection
$db_connect        =  mysql_connect ($db_host, $db_user, $db_password);

// Select Database
$db_select        =  mysql_select_db ($db_name, $db_connect);

// Update Values in Database


$query         = "UPDATE $db_table SET

    age  =  age + 1,

    land = '".$_POST['data3']."'

    WHERE name = '".$_POST['data1']."'

    ";


// Execution MySQL query        
$result =  mysql_query($query) or die(mysql_error($db_connect));

//Close MySQL connection
mysql_close($db_connect);

//HTTP Response
echo " your age: age";

?>

変数の値をエコーし​​たいのです$ageが、代わりに常に「年齢」という単語を取得します。たとえば、コードはエコーする必要がありますyour age: 5が、代わりに出力しますyour age: age

4

1 に答える 1

3

まず、SELECTクエリを実行して、の更新された値を取得する必要がありますage。クエリは次のようになります。

"SELECT age FROM db_table_name WHERE name = ?"

そのクエリの結果を取得しPDO::fetch(PDOについては以下の私のメモを参照)、それを変数$ageに設定したら、echoステートメントで出力できます。

echo "Your age: $age";

mysql_*また、新しいコードには関数を使用しないでください。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています(赤いボックスを参照)。代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。どちらかがわからない場合は、この記事が役に立ちます。あなたが学びたいのであれば、これは良いPDOチュートリアルです。

mysql_*このための正確なコードを提供しない理由は、関数使用して実行するべきではないためです。$_POSTこのようなデータを使用してSQLクエリを直接作成することは、使用するのが非常に危険なコードであり、非常に悪い考えです。これは絶対にしないでください。あなたは多くのSQLインジェクション攻撃に自分自身を開放します。使っmysql_real_escape_stringても十分ではありません。プリペアドステートメントを使用する必要があります。

更新:これは、あなたが求めているものに近いが、PDOとプリペアドステートメントを使用した簡単な例です。これは決して包括的な例ではありません。それでも機能するように変更する方法がいくつかあり(たとえば、プリペアドステートメントを使用すると、1つのステートメントでサーバー上で複数のステートメントを実行できます)、サーバーが機能していません。それがまさにあなたが必要としているものであることを確認するためにテストする瞬間ですが、私はそれが全体のポイントを取得することを願っています。

<?php

// Create the database connection
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password');

// Set PDO/MySQL to use real prepared statements instead of emulating them
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// The UPDATE query we're going to use
$update_query = "UPDATE `db_table_name` SET age = age + 1, land = :land WHERE name = :name";

// Prepare the query
$stmt = $db->prepare($update_query);

// Bind variables to the named parameters in the query with their values from $_POST
$land = $_POST['data3'];
$name = $_POST['data1']
$stmt->bindParam(':land', $land);
$stmt->bindParam(':name', $name);

// Execute the statement on the server
$stmt->execute();

// The SELECT query we're going to use
$select_query = "SELECT age FROM `db_table_name` WHERE name = :name";

// Again, prepare the query
$stmt_select = $db->prepare($select_query);

// Bind the paramters (in this case only one) to the new statement
// $name is already set from before, so there is no need to set it again
$stmt_select->bindParam(":name", $name);

$stmt_select->execute();

/*
 * With no arguments, PDO::fetchColumn() returns the first column
 * in the current row of the result set. Otherwise, fetchColumn()
 * takes a 0-indexed number of the column you wish to retrieve
 * from the row.
*/
$age = $stmt_select->fetchColumn();

echo("Your age: $age");
?>

この情報はすべて、プリペアドステートメントPDO :: fetchColumn()に関するPHPドキュメントから直接取得されました。

于 2012-06-19T00:06:41.527 に答える