1

私のmysqlデータベースで一重引用符を置き換える必要があり、これを行うためにスクリプトを使用しています。他の文字ではうまく機能しますが、一重引用符に関してはまったく機能しません。

$sql[$handle]['sql'] = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search[$i].'\',\''.$replace[$i].'\')'

一重引用符を置き換えようとすると、次のエラーが発生します。

SQL 構文にエラーがあります。1) 行目の '''','')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これは、引用を検索するために使用する文字列です。$search[] = ('\'');

4

2 に答える 2

2

$search一重引用符を渡すため、エスケープする必要があります。つまり、MySQLを使用すると、次のようになります'''。これを追加:

$search[$i] = addslashes($search[$i]);

エスケープやSQLインジェクションの問題を回避するには、準備ステートメントを使用することをお勧めします。

于 2012-09-15T16:28:56.557 に答える
0

プリペアドステートメント?プレースホルダーを使用します。この例では、PEARDBパッケージを使用しています。

<?php
    // import the PEAR DB module
    require_once("DB.php");

    // connect
    $dsn = "mysqli://tehUserName:tehPassWord@db.example.com/tehDatabase";
    $conn = DB::connect($dsn);

    // note the question marks, `?`, used for the string values
    $statement = 'UPDATE '.$table.' SET '.$field.' = REPLACE(?, ?, ?)';
    $result = $conn->query ($statement, [ $field, $search[$i], $replace[$i] ]);

    // ...

PEAR DBパッケージは置き換えられたと思いますが、PHPをコーディングしてからしばらく経ちましたが、このスニペットはプリペアドステートメントとプレースホルダーを示しています。

PEAR DBパッケージを使用しなくても、プリペアドステートメントとプレースホルダーを使用できるはずですが、よくわかりません。(誰かがこの質問をその趣旨で編集したい場合は...)php.netのプリペアドステートメントに関する記事を参照してください。

于 2012-09-15T16:47:52.020 に答える