我有一个困惑的问题,我似乎无法理解...

我有两条SQL语句:

  • 第一种方法是将表单中的信息输入数据库.
  • 第二个从上面输入的数据库中获取数据,发送邮箱,然后记录事务的详细信息

问题是,似乎只有一个引号在第二个条目上触发了MySQL错误!第一个实例可以正常工作,但第二个实例会触发mysql_error().

表单中的数据处理方式是否与表单中捕获的数据不同?

查询1-这不会出现问题(并且不会转义单引号)

$result = mysql_query("INSERT INTO job_log
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id)
VALUES
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$special_instructions', '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");

查询2-输入带有单引号的名称(例如,O'Brien)时失败

$query = mysql_query("INSERT INTO message_log
(order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status)
VALUES
('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$message_content', '1')");

推荐答案

应该用mysql_real_escape_string()来转义这些字符串(在两个代码段中).

http://us3.php.net/mysql-real-escape-string

这两个查询行为不同的原因很可能是因为您打开了magic_quotes_gpc(您应该知道这是个坏主意).这意味着从$_GET、$_POST和$_COOKIES收集的字符串将为您转义(即"O'Brien" -> "O\'Brien").

一旦存储了数据,然后再次检索,从数据库返回的字符串将自动为您转义.你会得到"O'Brien"分.所以,你需要通过mysql_real_escape_string().

Php相关问答推荐

使用PHP 7.4在ZipArchive中设置目录mtime

Symfony Monolog:使用多个格式化程序

composer如何解析包名?

尽管包含目标日期,但日期范围比较仍有意外输出

MULTI UPDATE Laravel为什么只能更新我的第一行

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

使用CODIGNITER3中的OR和AND子句进行查询

登录后重定向在WooCommerce中购买产品的用户

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

Woocommerce 临时购物车税未根据第一个请求正确计算

Laravel 10 中的自定义类未找到

根据支付网关选项更改 WooCommerce Checkout 上的立即付款按钮文本

在 DateTime 或 DateTimeImmutable 对象上调用modify() 时是否必须使用空格?

为什么 php 只能在我的 Nginx Web 服务器的某些目录中工作?

无法使用 slim 的父级容器

Firefox 115 会话行为:为什么页面无法找到要加载的现有会话 ID?

图像未在 Laravel Ajax Crud 中显示

WooCommerce 订单和邮箱通知的自定义产品描述

PHP删除具有相同键的项目,除了具有最低值的项目