无法将特殊字符插入MySQL表

我需要将包含 / n </ code>的一个字符串值更新到mysql表中,但更新后 该字符串值创建新行。</ p>

我正在使用下面给出的一些代码。</ p>

  require_once'include / dbconfig.php'  ; 
$ tracking_id ='108597711876';
$ payment_mode ='借记卡';
$ card_name ='Maestro借记卡';
$ status_message ='SUCCESS';
$ bank_ref_no ='327446'; \ n $ str =“tracking_id:”。$ tracking_id。“\
payment_mode:”。$ payment_mode。“\
card_name:”。$ card_name。“\
status_message:”。$ status_message。“\
bank_ref_no:”。$ bank_ref_no;
$ qry =“UPDATE cb_all_state set comment ='”。$ str。“'WHERE id = 1”;
$ sql = mysqli_query($ connect,$ qry);
</ code> </ pre >

我需要直接输入以下格式的字符串值。</ p>

  tracking_id:108597711876 
payment_mode:借记卡
card_name:Maestro借记卡
status_message :SUCCESS
bank_ref_no:327446
</ code> </ pre>

但更新后我得到的是 降低列内的数据。</ p>

  tracking_id:108597711876 
payment_mode:借记卡
card_name:Maestro借记卡
status_message:SUCCESS
bank_ref_no:327446
</ code> </ pre>

实际上我需要用 / n </ code>输入字符串值,但是在更新后它会创建新行。</ p>
</ div>

展开原文

原文

I need to update one string value which contains /n into mysql table but after update that string value creates new line.

I am using some code which is given below.

require_once 'include/dbconfig.php';
$tracking_id='108597711876';
$payment_mode='Debit Card';
$card_name='Maestro Debit Card';
$status_message='SUCCESS';
$bank_ref_no='327446';
$str="tracking_id : ".$tracking_id."\
payment_mode : ".$payment_mode."\
card_name : ".$card_name."\
status_message : ".$status_message."\
bank_ref_no : ".$bank_ref_no;
$qry ="UPDATE cb_all_state set comment='".$str."' WHERE id=1";
$sql=mysqli_query($connect,$qry);

I need to entry the string value as below format directly.

tracking_id : 108597711876
payment_mode : Debit Card
card_name : Maestro Debit Card
status_message : SUCCESS
bank_ref_no : 327446

But after update I am getting the following data inside the column.

tracking_id : 108597711876
payment_mode : Debit Card
card_name : Maestro Debit Card
status_message : SUCCESS
bank_ref_no : 327446

Here actually I need to entry the string value with /n but it creates new line after update.

dqtm8504
dqtm8504 我明白你了现在。这听起来像是这个问题的一个很好的答案。
大约一年之前 回复
dongshan4518
dongshan4518 如果你创建一个像这样的字符串$str=“\ ”,那么你是正确的。那么在n之前需要2个反斜杠,但是如果你使用单引号,你只需要1个反斜杠$str=' ';试试吧!如果使用预准备语句,则不需要再次使用反斜杠转义,因为此时数据是纯数据,它将作为文字字符放入DB中。OP的方式是,还有一个解析器可以将这2个字符转换为换行符,这不是OP想要的。
大约一年之前 回复
duanlu1950
duanlu1950 准备好的语句会将新行字符转换为 ?我还不清楚它到底有多重复。准备好的声明只会告诉您什么是数据,什么不是。如果服务器将字符 解释为换行符,那么服务器是否知道什么是数据以及什么不是数据都无关紧要。OP似乎需要的是字符'\'+'n'彼此相邻。这意味着他们需要一个转义反斜杠,如下所示:\ ,或者来自PHP(因为它们需要两个转义的反斜杠)\\\ 。也许我仍然只是误解了你。
大约一年之前 回复
drnx3715
drnx3715 让自己更清楚。这是SQL注入的经典示例。你的$str是正确的(你可以通过使用单引号避免双反斜杠),但是当你执行查询时你没有使用预准备语句,并且 被SQL解析器解释为换行符。使用准备好的语句,你的梦魇应该结束。
大约一年之前 回复
douluoxiao2286
douluoxiao2286 也许\\\ ?有点笨重,但可能会奏效。
大约一年之前 回复

1个回答



mysqli_real_escape_string($ str)应该在这里帮助你,因为它将处理转义特殊字符,如新行。 在您的代码中,这应该是:</ p>

  $ str =“tracking_id:”。$ tracking_id。“
payment_mode:”。$ payment_mode 。

card_name:”。$ card_name。“
status_message:”。$ status_message。

nbank_ref_no:”。$ bank_ref_no;
$ qry =“UPDATE cb_all_state set comment ='”。 mysqli_real_escape_string($ STR)。 “'WHERE id = 1”;
$ sql = mysqli_query($ connect,$ qry);
</ code> </ pre>
</ div>

展开原文

原文

mysqli_real_escape_string($str) should assist you here as it will handle escaping special characters like new lines. In your code this should be:

$str="tracking_id : ".$tracking_id."
payment_mode : ".$payment_mode.
  "
card_name : ".$card_name."
status_message : ".$status_message.
  "
bank_ref_no : ".$bank_ref_no;
$qry ="UPDATE cb_all_state set comment='". mysqli_real_escape_string($str). "' WHERE id=1";
$sql=mysqli_query($connect,$qry);

doushan5222
doushan5222 看到我的其他评论。
大约一年之前 回复
duannuochi3549
duannuochi3549 为什么? 这根本不是那个问题的重复! 这与OP提出的问题完全无关。 好建议,但不重复。
大约一年之前 回复
duanqian3464
duanqian3464 我给了另一种选择。 我投票结束了重复。
大约一年之前 回复
dongyan3562
dongyan3562 随意添加答案。 显示一些替代方案是个好主意,特别是如果它们比作者之前使用的或者像我这样的其他评论者更安全。
大约一年之前 回复
douci1918
douci1918 他的代码中没有任何地方使用任何需要mysqli_real_escape_string形式的垫片的东西。 重写意味着只更改一行代码,这与您的建议相同。
大约一年之前 回复
duanqianruan8448
duanqianruan8448 因为它不需要在作者身边重写现有代码。 他有一个现有的应用程序,一个当前的问题,并寻求解决方案。 我为什么要推荐作者从头开始?
大约一年之前 回复
dsa2c2255888
dsa2c2255888 看到这个解释:phpdelusions.net/top#escaping
大约一年之前 回复
duanluan3651
duanluan3651 好的,但是我仍然不明白为什么mysqli_real_escape_string在这里比实际准备好的语句更好?
大约一年之前 回复
dongtaogu8510
dongtaogu8510 哪个是错的,在正确的上下文中使用时,函数没有任何不好。 作者的问题是“......实际上我需要用 输入字符串值,但它会创建新的行...”和mysqli_real_escape_string所做的是转义特殊字符:“编码的字符是NUL(ASCII 0), , ,\,',“和Control-Z。 ”。
大约一年之前 回复
dongtu0088
dongtu0088 我不是在谈论用户输入验证。 我指出你不应该推荐mysqli_real_escape_string
大约一年之前 回复
dtip91401
dtip91401 这与问题作者的主题无关。 通过这种评论,你几乎总能臃肿问题和答案。 在上面的示例中没有任何用户输入,那么为什么您希望在答案中看到输入验证?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问