2017-10-20 18 views
0

J'ai une requête SQL, dans laquelle je convertis des pouces en pieds.Comment réparer une erreur de devis unique dans une requête SQL?

<?php 
$query =" 
SELECT * 
,replace (replace('<feet>'' <inches>"', 
        '<feet>', height/12), 
      '<inches>', height % 12) AS playerHeight 
,abbrName 
FROM leagueRosters 
INNER JOIN leagueTeams AS teamInfo 
ON leagueRosters.teamId=teamInfo.teamId 

WHERE abbrName LIKE '".$_GET['team']."' 
ORDER BY rosterId DESC 
"; 
$resultRoster = mysqli_query($connect, $query); 
?> 

D'après ce que je comprends que je suis censé doubler les guillemets simples que je l'ai fait

,replace (replace("<feet>"" <inches>"", 
        "<feet>", height/12), 
      "<inches>", height % 12) AS playerHeight 

Et j'ai aussi essayé cette

,replace (replace("'<feet>'" "'<inches>'", 
         "'<feet>'", height/12), 
       "'<inches>'", height % 12) AS playerHeight 

Ni l'un fonctionne. J'ai essayé quelques autres combinaisons, mais je me retrouve toujours avec une erreur sur au moins une ligne.

J'ai suivi la réponse à cette question - How do I escape a single quote in SQL Server? Mais je "suis toujours pas sûr de ce que je fais mal

+0

Je ne comprends pas pourquoi vous utilisez 'remplacer()' dans le premier p dentelle, lorsque la chaîne d'origine est un littéral. Utilisez simplement la concaténation de chaînes. – Barmar

+0

Essayez ceci: $ query = » SELECT * remplacer (remplacer (' '' ', '', hauteur/12), '', hauteur% 12) playerHeight, abbrName DE leagueRosters INNER JOIN leagueTeams AS teamInfo ON leagueRosters.teamId = teamInfo.teamId OERE abbrName LIKE '$ _GET [équipe]' ORDER BY rosterId DESC "; – Nic3500

+0

Note: L'interface orientée objet de 'mysqli' est significativement moins verbeuse, rendant le code plus facile à lire et à auditer, et n'est pas facilement confondue avec l'interface' mysql_query' obsolète. Avant de vous investir trop dans le style procédural, cela vaut la peine de changer. Exemple: '$ db = new mysqli (...)' et '$ db-> prepare (" ... ")' L'interface procédurale est un artefact de l'ère PHP 4 quand l'API 'mysqli' a été introduite et ne devrait pas être utilisée dans de nouvelles code. – tadman

Répondre

1

Vous devez échapper à la guillemet il ne termine pas la chaîne de PHP

..
$query =" 
SELECT * 
,replace (replace('<feet>'' <inches>\"', 
        '<feet>', height/12), 
      '<inches>', height % 12) AS playerHeight 
,abbrName 
FROM leagueRosters 
INNER JOIN leagueTeams AS teamInfo 
ON leagueRosters.teamId=teamInfo.teamId 

WHERE abbrName LIKE '".$_GET['team']."' 
ORDER BY rosterId DESC 
"; 

Mais il n'y a pas besoin d'utiliser replace en premier lieu, il suffit d'utiliser la concaténation de chaîne.

$query =" 
SELECT * 
,CONCAT(FLOOR(height/12), ''' ', height % 12, '\"') AS playerheight 
,abbrName 
FROM leagueRosters 
INNER JOIN leagueTeams AS teamInfo 
ON leagueRosters.teamId=teamInfo.teamId 

WHERE abbrName LIKE '".$_GET['team']."' 
ORDER BY rosterId DESC 
"; 
+0

Ooooh ok, merci beaucoup @barmar pour l'aide et l'information. Je suis seulement 4 semaines dans l'apprentissage de SQL sur mon propre et j'ai utilisé «remplacer» après à cause de l'information que j'ai trouvé ici - [link] https://stackoverflow.com/questions/30078773/converting-a-number- to-feet-inches% 5D – ssx95351