Trackvia 忽略包含撇号的记录


Trackvia ignores records containing apostrophes

两者

'CUSTOMER' => htmlspecialchars($tmpArray['Customer_Bill_Name'], ENT_QUOTES)

 'CUSTOMER' => mysqli_real_escape_string($con, $tmpArray['Customer_Bill_Name']), 

无法解决我的问题转义'撇号

我有"客户"字段,这是一个linked field(dropdown list),这意味着此字段中的值来自另一个表。为了从此字段中添加/选择Customer_Bill_name等效项,您需要具有完全匹配的记录,这意味着CUSTOMER必须完全等于Customer_Bill_Name的值。

但是当Customer_Bill_Name包含撇号时,我遇到了问题'例如XXX'S LLC.

我尝试了var_dump()print_r()看看数据的外观,但我看不出任何问题,问题是当尝试输入记录时它没有,我试图发送一个数组Customer_Bill_name工作正常。

$records

     $records=array(
      'CUSTOMER' => mysql_escape_string($tmpArray['Customer_Bill_Name']),
      'WHEEL PN 1-S' => htmlspecialchars($wheelpn, ENT_QUOTES),
      'QUANTITY'          => htmlspecialchars($tmpArray['Quantity'], ENT_QUOTES),
      'SO DATE'          =>htmlspecialchars($tmpArray['TransactionDate'], ENT_QUOTES),
      'SO NUMBER'         => htmlspecialchars($tmpArray['Reference'], ENT_QUOTES),
       'CUSTOMER PN' => htmlspecialchars($tmpArray['PartNumber'], ENT_QUOTES),
      'SHIP VIA'         => htmlspecialchars($tmpArray['WhichShipVia'], ENT_QUOTES),
      'PROMISED DATE'         => htmlspecialchars($tmpArray['ShipByDate'], ENT_QUOTES),
      'COMMENTS'         => htmlspecialchars($tmpArray['Comment'], ENT_QUOTES),
      'PO #'         => htmlspecialchars($tmpArray['CustomerInvoiceNo'], ENT_QUOTES),   
      'WO Notes'         =>htmlspecialchars($tmpArray['SalesDescription'], ENT_QUOTES),
      'ROUTING'         =>htmlspecialchars($routing, ENT_QUOTES),

   );
$tv->addRecord($tableId, $records);
/

/addRecord() 函数

  /**
 * Add more than one record at once to a table. Batch inserts.
 * 
 * @param  int   $tableId
 * @param  array $records
 * @return array
 */
 public function addRecords($tableId, $records)
   {
     $url = self::BASE_URL . self::RECORDS_URL;
     $data = array(
     'table_id' => $tableId,
     'records' => $records
    );
    return $this->api($url, 'POST', json_encode($data), 'json');
    }

var_dump($tableId)var_dump($records)var_dump($this->api(...))

    int(45454270957) array(12) { 
             ["CUSTOMER"]=> NULL 
             ["WHEEL PN 1-S"]=> string(0) "" 
             ["QUANTITY"]=> string(21) "2.0000000000000000000" 
             ["SO DATE"]=> string(10) "2010-12-02" 
             ["SO NUMBER"]=> string(5) "655028" 
             ["CUSTOMER PN"]=> string(0) "" 
             ["SHIP VIA"]=> string(3) "DHL" 
             ["PROMISED DATE"]=> string(10) "2014-12-23" 
             ["COMMENTS"]=> string(0) "" 
             ["PO #"]=> string(4) "98430" 
             ["WO Notes"]=> string(16) "sps990X15 8-8 JDY" 
             ["ROUTING"]=> string(0) "" } NULL 

请帮忙谢谢!

问题是,如果尚未建立MySQL连接,mysqli_real_escape_string()返回一个空字符串。由于您使用的是外部API进行记录管理,因此我怀疑MySQL连接从一开始就不存在。

因此,您将错误数据发送到 Trackvia API - 该 API 返回NULL响应。

解决方案是使用非MySQL库将数据解析/清理到API中。我建议str_replace您的 API 出现问题的字符。

htmlspecialchars不起作用,因为有了ENT_QUOTES,像'这样的角色会变得'"会变得"。当您var_dump它时,您认为它工作正常,因为 HTML 实体会呈现回引用。所以XXX's AG实际上被存储为XXX's AG