gpt4 book ai didi

php - 即使使用准备好的语句,PDO 也不处理字段数据中的撇号

转载 作者:行者123 更新时间:2023-11-29 06:31:18 26 4
gpt4 key购买 nike

我的印象是 PDO 的准备好的语句也做了旧的 MYSQL_REAL_ESCAPE_STRING 所做的事情。我的代码使用这样的准备好的语句:

 $updatesql = "UPDATE projects
SET title= ?, project_status= ?, bpm= ?, genre= ?, release_genre= ?,
vocals= ?, lyrics_written= ?, voice_of= ?, start_date= ?, finish_date= ?,
project_time= ?, file_name= ?, mixed= ?, mastered= ?, mixed_by= ?,
mastered_by= ?, loudness_level= ?, release_date= ?, artwork_link= ?,
audio_link= ?, length= ?, lyrics_link= ?, priority= ?, notes= ?, lyrics= ?,
project_key= ?, featuring= ?, producers= ? WHERE id= ?
LIMIT 1";



//update record with PDO

$pdo->prepare($updatesql)->execute([$title, $project_status, $bpm, $genre, $release_genre,
$vocals, $lyrics_written, $voice_of, $start_date, $finish_date,
$project_time,$file_name, $mixed, $mastered, $mixed_by,
$mastered_by, $loudness_level, $release_date, $artwork_link,
$audio_link, $length, $lyrics_link, $priority, $notes, $lyrics,
$project_key, $featuring, $producers, $id ]);

但我发现如果表单提交单词 O'riely,则会导致 MYSQL 错误。

我不能使用 mysqli_real_escape_string 因为它需要 mysqli 连接作为第一个参数,而我正在使用 PDO。

唯一的其他解决方案是对我的所有数据库插入使用addslashes,然后对我的所有显示数据字段使用stripslashes吗?这似乎是我们 10 年前才会做的事情。当使用 PDO 准备好的语句时,我缺少什么,因为它涉及处理撇号等的最佳实践?

更新:

我的本​​地环境/服务器信息如下:服务器:通过 UNIX 套接字的本地主机服务器类型:MySQL服务器版本:5.7.26-0ubuntu0.18.04.1 - (Ubuntu)协议(protocol)版本:10用户:root@localhost服务器字符集:UTF-8 Unicode (utf8) Apache /2.4.29 (Ubuntu)数据库客户端版本:libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id:3591daad22de08524295e1bd073aceeff11e6579 $PHP 扩展:mysqliDocumentation mbstringDocumentationPHP版本:7.2.17-0ubuntu0.18.04.1

错误消息:

INSERT INTO projects ( title, project_status, bpm, genre, release_genre, 
vocals, lyrics_written, voice_of, start_date, finish_date,
project_time, file_name, mixed, mastered, mixed_by,
mastered_by, loudness_level, release_date, artwork_link, audio_link,
length, lyrics_link, priority, notes, lyrics,
project_key,featuring, producers )
VALUES ( 'wyatt's', 'Idea Only','99', '99', '99',
'0','0', '', '1969-12-31', '1969-12-31',
'0', '', '0', '0', '',
'', '', '1969-12-31', '', '',
'', '', '3', '', '',
'','', '')
SQLSTATE[42000]: Syntax error or access violation: 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 's', 'Idea Only','99', '99', '99', '0','0', '', '1969-12-31', '1969-12-31', '0',' at line 7

最佳答案

这个问题需要解决。

PDO 确实处理撇号,以及通过参数添加到查询的输入数据中的任何其他字符

您在此处发布的代码绝不会产生这样的错误。

所以你的问题在其他地方。您可能正在运行此代码的另一个版本,或者您的查询中有一些拼写错误或其他愚蠢的事情。每个人都会遇到这种情况。但你必须坚定你的知识。如果你的查询返回错误,那么你必须调查这个错误,而不是责怪 PHP 没有做它应该做的事情。通常是这样。所以问题出在你身上,没有人能告诉你是哪一个。您只能自己通过努力调试代码来完成它。

在这里您可以学习如何做到这一点。我有一篇文章可以帮助您在 Stack Overflow 上回答您的问题,或者 - 最有可能 - 在此过程中自己找到问题:How to debug your PDO code

关于php - 即使使用准备好的语句,PDO 也不处理字段数据中的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56105384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com