0

私はphpを介して取得し、ページにエコーしているmysqlデータベースからの情報を持っています。私が最初に問題に気付いたのは、出力にいくつかの \'s と、疑問符の付いた黒いひし形がいくつかあったためです。私はいくつかの調査を行い、2つのことを実現しました。

  1. エスケープ文字が含まれていたため、データベースに情報をうまく入力できないようにツールを設計しました。

  2. これは、ストリップスラッシュを呼び出すことで解決できます。

ストリップ スラッシュを使用すると、出力から \ が削除されましたが、認識されない文字がまだ残っていました。それを調べたところ、これはある種の文字エンコーディングの問題であることがわかりました。しかし、私が理解していないのは、データベースに一部の 's がエスケープされたフィールド (\) とそうでないフィールドがあったことです。例えば:

今日の料理は昨日の料理です。

1 つの単一引用符がエスケープされ、1 つがエスケープされない理由がわかりません。認識されなかったその他の文字には、二重引用符 (")、コンマ (,)、さらにはピリオド (具体的には省略記号 ...) などがあります。

私は何が欠けていますか?

さらに、私のデータベースは utf-unicode であり、明確にするために、いくつかのデータベース エントリの同じフィールドに \' と ' の両方があります。違いがある場合、これらのエントリは varchar です。

追加情報を提供する必要がある場合はお知らせください。

4

1 に答える 1

0

PHP .netこれは、一緒に貼り付けられた2 つの小さなコード フォームです。PDO を使用してデータベースと通信します。これは、 stripslashes を使用するよりもはるかに優れていmsqli_real_escape_stringます。

<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
    /* Execute a prepared statement by binding PHP variables */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour = :colour');
    $sth->bindParam(':calories', $calories, PDO::PARAM_INT);
    $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
    $sth->execute();
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>
于 2013-03-15T19:14:31.970 に答える