0

Web サイトの管理側に PHP スクリプトをインストールしました。これにより、SQL クエリを実行できるようになります。ただし、ホスト会社の OPS ページで mysqladmin を使用して実行した場合と同じ結果が得られません。

私が提出するとき:

SELECT orders_id FROM `orders_status_history` WHERE `comments` LIKE '%12345%'

mysqladmin で 1 つの結果 (テスト レコード) を取得します。それで成功です。

ただし、PHP プログラムを介して送信すると、次のようになります。

MySQL error 1064: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '\'%12345%\'' at line 1

While executing:

SELECT orders_id FROM `orders_status_history` WHERE `comments` LIKE \'%12345%\'

PHPを介して送信する場合は構文が異なると想定していますが、私の人生では、それがどうあるべきかを理解することはできません. 一重引用符の前にスラッシュを付けてみました。私は二重引用符を試しました。私は数時間ウェブサーフィンをしました。私はあまりにも多くのことを試しましたが、もはやそれらをまっすぐに保つことさえできません. 私はそれが単純なものであると仮定しています。誰かが私を正しい方向に向けることができますか?

これがphpプログラムのコードです。ユーザーは SQL クエリをテキスト領域に貼り付け、SEND ボタンを押します。繰り返しますが、まったく同じクエリが mysqladmin で機能しますが、この PHP プログラムを使用する場合は機能しません。

<?php
/*
  $Id: sql_interface.php,v 1.00 2004/08/13 00:28:44 draven Exp $
*/

  require('includes/application_top.php');
  $text_heading = INITIAL_TITLE;

    function sqlquery($query) {
    $result = mysql_query($query);
    global $query_result;
      if (mysql_errno()) {
        $query_result = "MySQL error ".mysql_errno().": ".mysql_error()."\n\nWhile executing:\n\n$query\n------------------------------------------------------------------------------------------\n\n";
      } else {
        $query_result = "Your query was successful!\nRows Affected: " . mysql_affected_rows();
      }
    return $result;
  }

  $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

  if (isset($HTTP_POST_VARS['action']) && ($HTTP_POST_VARS['action'] == 'process')) {
    sqlquery($HTTP_POST_VARS['query_entry']);
    $text_heading = POST_QUERY_TITLE;
    $tryagain = TRY_AGAIN_TEXT;
  }
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo HEADING_TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2"><?php echo tep_draw_form('sql_interface', 'sql_interface.php', 'post') . tep_draw_hidden_field('action', 'process'); ?>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading" colspan="3"><?php echo HEADING_TITLE; ?></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
                  <tr>
                    <td class="main" colspan="3"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
                  </tr>
                  <tr>
                    <td class="main" colspan="2"><?php echo '<b>' . $text_heading . ':</b>'; ?></td>
                    <td class="main" align="right" colspan="1"><i><?php echo $tryagain; ?></i></td>
                  </tr>
                  <tr>
                    <td class="main" colspan="3"><?php echo tep_draw_textarea_field('query_entry', '', 137, 30, $query_result, '', false); ?></td>
                  </tr>
                  <tr>
                    <td class="main" colspan="3"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>
                  </tr>
              <tr>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td colspan="2"align="right"><?php echo tep_image_submit('button_send.gif', IMAGE_BUTTON_EXECUTE_SQL) . tep_draw_separator('pixel_trans.gif', '10', '1'); ?></form></td>
              </tr>
              <tr>
                <td class="smallText" colspan="3">&nbsp;</td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
    </table></td>
<!-- body_text_eof //-->
  </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
4

2 に答える 2

2

あなたが使用している正確なphpコードが何であるかわからないため、その特定のクエリで一重引用符をエスケープする必要があるかどうかはわかりません。

$query = "SELECT orders_id FROM orders_status_history WHERE comments LIKE '%12345%'";

それはうまくいきます。次の場合にのみ、それらをエスケープする必要があります。

$query = 'SELECT orders_id FROM orders_status_history WHERE comments like \'%12345%\'';

これで問題が解決しない場合は、関連する php コードを投稿してください。

編集: クエリで stripslashes() を使用してみて、MySQL にスラッシュを残して mysql_real_escape_string() を見てください。

于 2013-03-12T22:17:06.320 に答える