【问题标题】:How to escape string in mySQL如何在 mySQL 中转义字符串
【发布时间】:2013-11-23 18:51:28
【问题描述】:

我正在尝试构建一个脚本 (php),在其中将某些数据库字段从旧数据库复制到新数据库。

某些字段包含特殊字符,例如 ',当帖子包含此内容时,我无法解决脚本崩溃的问题。我试过了:

mysql_real_escape_string($cat2ss['name']) 和 mysql_real_escape_string(htmlspecialchars($cat2ss['name']))

但它们都崩溃了。

任何想法如何解决这个问题?

这是一个示例代码:

$cat2s="SELECT * FROM o_product_description";
$cat2s_ex=mysql_query($cat2s) or die('<p>'.$cat2s.'</p>'.mysql_error());

while($cat2ss = mysql_fetch_array($cat2s_ex))
{
    $cat2sc = "INSERT INTO product_description (product_id, language_id, name, description, quality, catalog, cat_no, cat_val, cancellation, meta_description, meta_keyword, seo_keyword, catalogue, sort_order, attribut) VALUES ('".$cat2ss['product_id']."', '".$cat2ss['language_id']."', '".mysql_real_escape_string($cat2ss['name'])."', '".mysql_real_escape_string($cat2ss['description'])."', '".$cat2ss['quality']."', '".$cat2ss['catalog']."', '".$cat2ss['cat_no']."', '".$cat2ss['cat_val']."', '".$cat2ss['cancellation']."', '".$cat2ss['meta_description']."', '".$cat2ss['meta_keyword']."', '".$cat2ss['seo_keyword']."', '".$cat2ss['catalogue']."', '".$cat2ss['sort_order']."', '".$cat2ss['attribut']."')";

    $cat2sc_ex=mysql_query($cat2sc) or die('<p>'.$cat2sc.'</p>'.mysql_error());
}

【问题讨论】:

  • 脚本崩溃时会发生什么?您收到什么样的通知或错误?
  • 你能发布更多吗?您遇到问题的示例查询会更有洞察力。在任何情况下,这些函数都不应使用,它们已从 PHP 中删除,最佳做法是 spend a half hour to learn PDO 并改用它。
  • 脚本一直运行,直到遇到带有特殊字符 ) 的文本字符串,例如 ')。请参阅以下错误消息:
  • ...值('10778','2','','','vht','','F.52','0','lyckÃ¥sgÃ¥rd ', '', 'F.52, 5 öre Oscar II, LYCKÃ...S'GÃ...RD 15-11-03 [F/SM] vht', 'f52-5-re-oscar-ii-lycksgrd- 15-11-03-fsm-vht', '', '0', '')

标签: php mysql


【解决方案1】:

您是否考虑过使用 PDO?无法在不知道您想要的行的情况下为您提供确切的代码,您只需执行类似的操作

$sql="SQL STATEMENT WITH :name"
$dbh->prepare($sql)
$dbh->execute(array(':name' => $cat2ss['name']));

【讨论】:

  • 我想做的是将某些数据字段从旧数据库转移到新数据库。我可以设法进行“正常”传输,但是当脚本在 VARCHAR 字段中遇到特殊字符时,它会停止/崩溃。
  • 这就是 PDO 的准备语句最擅长的。它处理所有特殊字符情况(以及 SQL 注入等),因此您不必担心变量包含什么。
【解决方案2】:

我猜您缺少数据库连接 ID。你的代码应该是这样的:

$db = mysql_connect();
$var = mysql_real_scape_string($db, $the_string_to_scape);

当然,你必须使用正确的参数连接到数据库。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多