2010-02-02 38 views
14

tengo esta consulta:MySQL consulta UPDATE devuelve "0 filas afectadas"

UPDATE phonecalls 
    SET Called = "Yes" 
WHERE PhoneNumber = "999 29-4655" 

Mi mesa es phonecalls, tengo una columna denominada PhoneNumber. Todo lo que quiero actualizar es una columna llamada Called para "sí".

¿Alguna idea de lo que estoy haciendo mal? cuando devuelvo mi consulta dice 0 filas afectadas.

+2

¿Seguro existe el Fax? Intente convertir la consulta en una selección y vea lo que obtiene: 'SELECT Llamado DESDE llamadas telefónicas WHERE PhoneNumber =" 999 29-4655 "'. – outis

+0

¿Ha consultado la tabla y recuperado el número de filas donde PhoneNumber = "000 29-4655"? ¿Este número era mayor que 0? –

+0

La selección devuelve bien –

Respuesta

26

Como sugirieron la anfetamina y Yada, consulte con SELECT, si su número de teléfono está en la tabla.

Pero tenga en cuenta: Si el valor de called de la fila en cuestión ya es "Sí", mysql no cambiará el valor y, por lo tanto, devolverá "0 filas afectadas". Así que asegúrese de comprobar también el valor actual de called

+0

La selección devuelve bien –

+0

¿Qué pasa con el segundo párrafo de su respuesta? –

+11

FLAG_FOUND_ROWS en los indicadores de conexión hará que devuelva 1 incluso si el valor al que está configurado es el mismo que el valor que ya tiene. – Will

0

Pruebe select count(*) from phonecalls where PhoneNumber = "999 29-4655"; Eso le dará el número de filas coincidentes. Si el resultado es 0, entonces no hay una fila en la base de datos que coincida con.-

0

Verifique para asegurarse de que esto arroje algún resultado.

SELECT * FROM phonecalls WHERE PhoneNumber = '999 29-4655' 

Si no devuelve ningún resultado que el filtro WHERE PhoneNumber = '999 29-4655' no es correcto.

+0

mysql comprende comillas simples y dobles. –

+0

La selección devuelve bien –

1

El problema podría ser que no hay registros con PhoneNumber == "999 29-4655".

Intentar esta consulta:

SELECT * FROM phonecalls where PhoneNumber = '999 29-4655' 

Si no se devuelve nada, entonces no hay filas que coinciden.

+0

La selección devuelve bien –

0
  1. ¿Dice filas coincidentes: 1 modificación: 0 Advertencias: 0? Entonces tal vez ya está configurado en ese valor.
  2. ¿Has probado las comillas simples frente a las comillas dobles?
  3. "999 29-4655" es el espacio un espacio o una pestaña y es consistente en su consulta y la base de datos?
0

de que es mi sugerencia:

UPDATE `phonecalls` SET `Called` = 'yeah!' WHERE `PhoneNumber` = '999 29-4655' AND `Called` != 'yeah!' 

Y asegúrese de que con el nombre de mayúsculas y minúsculas de mesa y field`s.

5

Otra razón para 0 filas afectadas que he observado: tipo de datos incorrecto. Si la columna que desea actualizar es un número entero o booleano, y la establece en una cadena, no se actualizará, pero tampoco obtendrá ningún error.

En resumen las otras estrategias/ideas de este mensaje:

  1. Comprobar con una declaración SELECT, si sus donde trabaja y devuelve los resultados.
  2. Compruebe si sus columnas ya tienen el valor que desea establecer.
  3. Compruebe si el valor que desea se adapta al tipo de datos de la columna.
1

Para el beneficio de cualquier persona aquí de Google, este problema fue causado por mí porque estaba tratando de anexar a un campo vacío usando CONCAT().

UPDATE example SET data=CONCAT(data, 'more'); 

Si data es NULL, entonces CONCAT() rendimientos NULL (ignorando el segundo parámetro), por lo que el valor no cambia (la actualización de un valor NULL a ser un valor NULL), de ahí las 0 filas actualizadas.

En este caso, al cambiar a la función CONCAT_WS() se solucionó el problema.

0

Si los valores son los mismos, MySQL no actualizará la fila (sin provocar ningún tipo de advertencia o error), por lo que el número de filas afectado será 0.

Cuestiones relacionadas