0

私はPHPとMySQLが初めてで、以下の問題に苦しんでいます:

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid .;
    if(is_resource($sql) and mysql_num_rows($sql)>0){

SQL ステートメントを閉じようとすると、問題が発生します。私はそれが括弧とセミコロンに関係していることを知っていますが、何かを変更するたびに別のものを台無しにします. 誰か助けてくれませんか?

4

5 に答える 5

1

必要な作業は次のとおりです。

  • セミコロンの前の最後のピリオドを削除
  • 文字列リテラルを一重引用符で囲む
  • を使用してクエリを実行しますmysql_query

コード:

$sql = "UPDATE Pharm_Log set text = '$bloodtest'  WHERE patient = " . $patientid;
$result = mysql_query($sql);
if(is_resource($result ) and mysql_num_rows($result )>0) { ... }

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-02-12T12:08:51.317 に答える
1

セミコロンの前のドットを削除します。

于 2013-02-12T12:09:16.913 に答える
1

ええ.、構文エラーを引き起こしている最後のものです。さらに、非 int 値を引用符で囲む必要があります。また、mysql_real_escape_string を追加することを忘れないことも重要です。そうしないと問題が発生します。準備されたクエリで PDO または mysqli を使用する必要もあります。

<?php 
$sql = "UPDATE Pharm_Log 
        SET `text`='".mysql_real_escape_string($bloodtest)."' 
        WHERE patient = '".mysql_real_escape_string($patientid)."'";
?>
于 2013-02-12T12:11:57.320 に答える
1

最後に文字列を接続していないため、最初の行の最後のドットを削除します。次のようになります。

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid;

SQL サーバーに対してクエリを実行していますか? そうでない場合、変数$sqlは何もしないので、次を追加します。

$result = mysql_query($sql);

最後のコード行を変更して、代わりにクエリの結果を処理します

if(is_resource($result) && mysql_num_rows($result) > 0)
于 2013-02-12T12:15:58.803 に答える
0

最後はいらない.。に変えて、

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid;
于 2013-02-12T12:09:34.823 に答える